首页 > 编程语言 >C++中的static关键字

C++中的static关键字

时间:2024-03-08 11:56:58浏览次数:24  
标签:函数 静态 成员 C++ 关键字 static 变量

在 C++ 中,static 是一个关键字,用于声明静态变量、静态函数、静态类成员以及静态局部变量。static 关键字的作用取决于它所修饰的上下文,以下是 static 关键字的几种常见用法:

  1. 静态变量:在函数内部使用 static 关键字声明的变量称为静态局部变量。静态局部变量的生命周期延长到整个程序执行期间,但它的作用域仍限于声明它的函数内部。静态变量只会被初始化一次,即使函数被调用多次。
#include <iostream>

void count() {
    static int num = 0; // 静态局部变量
    num++;
    std::cout << "Counter: " << num << std::endl;
}

int main() {
    count(); // 输出 Counter: 1
    count(); // 输出 Counter: 2
    count(); // 输出 Counter: 3
    return 0;
}
  1. 静态函数:在函数声明或定义时使用 static 关键字修饰,表示该函数的链接属性为内部链接,只能在当前源文件中访问,不能被其他源文件调用。静态函数的作用域仅限于当前源文件。
#include <iostream>

static void foo() {
    std::cout << "Hello, World!" << std::endl;
}

int main() {
    foo(); // 输出 Hello, World!
    return 0;
}
  1. 静态类成员:在类中使用 static 关键字声明的成员变量或成员函数称为静态成员。静态成员属于类而不是类的对象,可以通过类名直接访问。静态成员变量只有一份副本,所有对象共享。
    静态成员函数内不能访问非静态成员,且不会隐式地使用this指针(当对一个对象调用成员函数时,编译程序先将对象的地址赋给 this 指针,然后调用成员函数,每次成员函数存取数据成员时,都隐式使用 this 指针。)
#include <iostream>

class MyClass {
public:
    static int count; // 静态成员变量

    static void printCount() { // 静态成员函数
        std::cout << "Count: " << count << std::endl;
    }
};

int MyClass::count = 0; // 静态成员变量初始化

int main() {
    MyClass::printCount(); // 输出 Count: 0
    MyClass::count = 10;
    MyClass::printCount(); // 输出 Count: 10
    return 0;
}

static 关键字的用法使得它在不同的上下文中具有不同的含义,但总体来说,它用于实现具有静态特性的变量和函数,例如在函数内部保持状态、在类中实现共享成员等。

标签:函数,静态,成员,C++,关键字,static,变量
From: https://www.cnblogs.com/fly-smart/p/18060678

相关文章

  • C++中OpenCV、Armadillo矩阵数据格式的转换方式
      本文介绍在C++语言中,矩阵库Armadillo的mat、vec格式数据与计算机视觉库OpenCV的Mat格式数据相互转换的方法。  在C++语言的矩阵库Armadillo与计算机视觉库OpenCV中,都有矩阵格式的数据类型;而这两个库在运行能力方面各有千秋,因此实际应用过程中,难免会遇到需要将二者的矩阵格......
  • C++中的volatile关键字
    在C++中,volatile是一个关键字,用于告诉编译器,该变量的值可能会在未知的时刻被意外地改变,因此编译器对于该修饰的变量的操作时应该保持对该变量内存地址的直接内存访问操作,而不应对访问该变量的代码进行任何优化。。volatile关键字的主要作用是告诉编译器不要对该变量进行优化,......
  • C++ Qt开发:QFileSystemModel文件管理组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QFileSystemModel组件实现文件管理器功能。QFileSystemModel是Qt框架中的一个关键类,用于......
  • 复试C++ 异常 看程序写结果
    就算每一个case后面都没有break,throw相当于起了break的作用?#include<iostream>#include<stdexcept>usingnamespacestd;classErrorA:publicruntime_error{public:ErrorA():runtime_error{"errorAAAA"}{}};classErrorB:publicruntime_erro......
  • C++入门编程----C++运算符(8)
    什么是运算符运算符是让程序执行特定的数学或逻辑操作的符号,用来表示针对数据的特定操作,也称之为操作符。C++运算符分别有算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符、移位运算符、sizeof运算符、三目运算符、逗号运算符和域解析运算符。算术运算符C++中的算术......
  • c++ lambda表达式
    引入lambda表达式也有人称之为匿名函数,能够在任何作用域下快速定义一个函数下面这行代码就是一个最简单的lambda表达式,最后输出为3autof=[](intx,inty)->int{returnx+y;};cout<<f(1,2);我们来解析一下lambda表达式autof=[](intx,inty)->int{returnx+y;};......
  • C++保证线程安全的方式
    1、互斥量可以确保同一时间只有一个线程访问临界区,防止出现竞态条件。2、原子操作std::atomic<int>mutex(1);对原子变量的操作是线程安全的。3、读写锁std::shared_mutexmutex;//读者:共享锁定mutex.lock_shared();mutex.unlock_shared();//写者:独占锁定mutex.lock......
  • c/c++指针中 * 和 & 的区别与联系
    在C语言中,*和&是两个非常基础但功能相反的操作符,它们分别是解引用(dereference)操作符和取地址(address-of)操作符。&(取地址操作符)用途:&操作符用来获取变量的内存地址。示例:假设有一个整型变量intx=10;,则&x表示获取变量x的内存地址。如果你有一个指针变量想要存储变量x的地址,可......
  • static关键字
    静态变量静态变量也称为类变量,这个变量是属于类的,类的所有实例都共享静态变量,可以通过类名来访问他们。静态变量在内存中只存在一份。实例变量:每创建一个实例就产生一个实例变量,与实例同时产生,同时销毁。/***@authorPickle*@versionV1.0*@date2024/3/511:27*/......
  • static修饰静态成员变量and静态成员函数
    在成员变量和成员函数之前加上static关键词,称为静态成员静态成员分为:(1)静态成员变量所有对象都共享同一份数据编译阶段就分配内存类内生命,类外进行初始化操作(2)静态成员函数程序共享一个函数静态成员函数只能访问静态成员变量实例代码1(静态成员变量):#include<iostrea......