static声明的变量也有作用域限制
int main(){
{
static int a = 1;
}
a = 2;
}
会报错:error: 'a' was not declared in this scope
如果声明的static变量没有使用,有些编译器会优化,有些不会
class A
{
public:
void func() {
static int a = 1;
}
};
int main() {
A c;
c.func();
return 0;
}
只有使用了静态变量,编译器才会真正创建它,修改代码为
class A {
public:
void func() {
static int a = 1;
a++;
}
};
int main() {
A c;
c.func();
return 0;
}
在块作用域下声明static变量优先执行
从颜色可以看出,static 声明变量的操作并不在创建b和b++之间执行。