C++中的static

Static主要用在五个地方,修饰全局变量,修饰局部变量、修饰普通函数、修饰类成员变量、修饰类成员函数。下面逐个说明。
Static修饰全局变量,也就是静态全局变量,它在全局数据区分配内存,而且静态全局变量默认初始化为0,非静态变量默认初始化时随机的,此外,静态全局变量只能在本文件中使用,其他文件不能使用它,就算是extern也不行,也正因这个,不同文件命名相同名字的静态全局变量也不会冲突。
Static修饰局部变量也被成为静态局部变量,静态局部变量也在全局数据区分配内存,它只能被初始化一次,也就是在首次运行到该变量时。静态局部变量默认的初始化也是0。还有,静态局部变量只在它的作用域里有效。比如我在while循环里定义一个静态局部变量,它只初始化一次,且只作用域循环体内。
Static修饰函数时,该函数就成了静态函数,静态函数只能做在本文件中使用,因此,其他文件定义同名的静态函数也不会冲突。
再来就是static修饰类成员变量。Static成员变量分分配的内存也是在全局数据区。因为这个,它必须在类外定义,而不能再类内定义,类内定义的变量只有在构造对象时才会分配空间,而static成员变量时对象构造前就已经存在的。同理,由于它在全局数据区,所有对象共享一个同一个static成员变量的副本。与全局变量相比,static成员变量未进入全局命名空间,因此不会与全局变量发生命名冲突,而且static成员变量也遵从访问权限控制。
最后一个是类的static成员函数,static成员函数为整个类服务,而不是只为单个对象服务。同样,static成员函数也要在类内声明,类外定义。此外,普通的类成员函数在传参时会隐式传递一个this指针,但是static成员函数不会,因此,他不能访问对象的成员变量,只能访问static成员变量,同样是因为这个,static成员函数不能被定义为虚函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++,`static`是一个关键字,可以用于修饰变量、函数和类。它具有不同的含义,取决于它所修饰的内容。 1. 静态变量Static Variables):在函数内部使用`static`修饰的变量称为静态变量。静态变量在程序的生命周期只被初始化一次,并且在函数调用之间保持其值。静态变量存储在静态存储区,而不是堆栈。可以通过函数名和作用域解析运算符来访问静态变量。 ```cpp void foo() { static int counter = 0; // 静态变量 counter++; cout << "Counter: " << counter << endl; } int main() { foo(); // 输出: Counter: 1 foo(); // 输出: Counter: 2 return 0; } ``` 2. 静态函数(Static Functions):在类使用`static`修饰的成员函数称为静态函数。静态函数不依赖于任何特定的对象,可以直接通过类名进行调用。它们不能访问非静态成员变量,只能访问其他静态成员(包括静态变量和静态函数)。 ```cpp class MyClass { public: static void staticFunc() { cout << "This is a static function" << endl; } }; int main() { MyClass::staticFunc(); // 输出: This is a static function return 0; } ``` 3. 静态数据成员(Static Data Members):在类使用`static`修饰的成员变量称为静态数据成员。静态数据成员属于类本身,而不是类的实例。它们在程序的生命周期只有一个副本,并且可以被类的所有对象共享。静态数据成员必须在类外部进行定义和初始化。 ```cpp class MyClass { public: static int staticVar; }; int MyClass::staticVar = 10; // 定义和初始化静态数据成员 int main() { cout << MyClass::staticVar << endl; // 输出: 10 return 0; } ``` 使用`static`关键字可以有效地控制变量、函数和类的作用范围和生命周期,并且具有一些特殊的用途,例如实现单例模式或在类共享数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值