C++的static关键字及变量存储位置总结
在C++中,static
关键字用于声明静态变量和静态成员函数。它可以改变变量的存储位置和生命周期。下面是对static
关键字及变量存储位置的详细总结。
静态变量的存储位置
静态变量在程序的整个生命周期内都存在,并且存储在静态存储区。静态存储区是在程序启动时分配的一块固定大小的内存区域,直到程序结束时才会释放。静态变量的存储位置不依赖于变量的作用域,而是与变量的声明位置有关。
下面是一个示例,说明静态变量的存储位置:
#include <iostream>
void foo()
{
static int count = 0; // 静态变量
count++;
std::cout << \"foo函数被调用了 \" << count << \" 次\" << std::endl;
}
int main()
{
foo(); // 输出:foo函数被调用了 1 次
foo(); // 输出:foo函数被调用了 2 次
foo(); // 输出:foo函数被调用了 3 次
return 0;
}
在上面的示例中,count
是一个静态变量,它在foo
函数中被声明。每次调用foo
函数时,count
的值都会增加,并且在函数调用之间保持不变。这是因为静态变量的存储位置在整个程序运行期间都是相同的。
静态成员变量的存储位置
静态成员变量是属于类的,而不是类的实例。它们存储在静态存储区,与类的任何实例无关。静态成员变量在类的所有实例之间共享,并且只有一个副本。
下面是一个示例,说明静态成员变量的存储位置:
#include <iostream>
class MyClass
{
public:
static int count; // 静态成员变量
MyClass()
{
count++;
}
};
int MyClass::count = 0; // 静态成员变量的定义和初始化
int main()
{
MyClass obj1;
MyClass obj2;
MyClass obj3;
std::cout << \"创建了 \" << MyClass::count << \" 个MyClass对象\" << std::endl; // 输出:创建了 3 个MyClass对象
return 0;
}
在上面的示例中,count
是MyClass
类的静态成员变量。每次创建MyClass
对象时,count
的值都会增加。由于静态成员变量在类的所有实例之间共享,所以它们的存储位置是相同的。
总结
static
关键字用于声明静态变量和静态成员函数。- 静态变量存储在静态存储区,在程序的整个生命周期内存在。
- 静态成员变量存储在静态存储区,与类的任何实例无关,只有一个副本。
- 静态变量和静态成员变量的存储位置不依赖于变量的作用域,而是与变量的声明位置有关。
希望这个攻略对你有帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++的static关键字及变量存储位置总结 - Python技术站