13匿名static

xiaoxiao2021-02-28  60

一、x重定义

#include <iostream> using namespace std; int x1 = 10; static int x1 = 100; //“x1” : 重定义;不同的存储类 Cpp.cpp e : \c++\cpp.cpp\cpp.cpp\类型转换.cpp 5 void main() { cin.get(); }

二、同一个文件中:static与匿名命名空间

#include <iostream> using namespace std; static int x1 = 100; namespace { int x1 = 999; }; //匿名命名空间,和全局变量不冲突 void main() { cout << ::x1 << endl; //100必须用::标识使用全局变量,匿名命名空间的x1无法访问 cin.get(); }

分析:结果是100,::x表示访问全局变量

三、不同文件中:static与匿名命名空间

test.cpp

static int x1 = 100;

main.cpp

#include <iostream> using namespace std; namespace { int x1 = 999; }; void main() { cout << x1 << endl; //999 cout << ::x1 << endl; //999 cin.get(); }

结果:999

分析:static限制test.cpp里面的x1的作用域为当前文件,因此在main.cpp中无法看到test.cpp定义的x1,从而::x访问的就是main.cpp里面的x1.

三、extern与匿名命名空间

test.cpp

int x1 = 100;

main.cpp

#include <iostream> using namespace std; extern int x1; namespace { int x1 = 999; }; void main() { cout << ::x1 << endl; //100 cin.get(); }

结果:100

分析:extern声明使用外部变量,此时把test.cpp链接到了main.cpp里面去了,此时的x1在main.cpp里面相当于全局变量,因此::x是100.

总结:

使用::x表示访问全局变量

转载请注明原文地址: https://www.6miu.com/read-2629272.html

最新回复(0)