我找不到关于未命名命名空间中的全局非静态变量的好解释.我尽可能地避免全局变量.在这个特殊情况下,我对纯粹理论方面的行为感兴趣.
假设以下代码:
在啊
namespace ai {
class Widget {
void DoSomething(int param);
};
}
Run Code Online (Sandbox Code Playgroud)
在a.cc
namespace {
int x;
void Helper() {
}
}
namespace ai {
void Widget::DoSomething(int param) {
x = param;
Helper();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我要创建同一个类Widget的两个实例,两个实例是否会共享相同的变量x?
如果类实例与不同的线程在同一个线程上,那么上述行为是否相同?
如果变量x是自定义类型而不是内置类型怎么办?
当变量x将被构造并且被破坏时?
sizeof(Widget)和这些变量之间有任何关系吗?
C++标准中定义了哪些方面,哪些方面没有?
任何其他考虑因素,例如"需要知道"该主题?也许任何人都可以提供好书参考(例如"Effective C++ ..")来阅读更多内容?
如果我要创建同一个类Widget的两个实例,两个实例是否会共享相同的变量x?
是的.这是一个全球变量.总是有一个 - 每个过程,就是这样.
如果类实例与不同的线程在同一个线程上,那么上述行为是否相同?
全局变量是每个进程的全局变量(不是每个线程).
如果变量x是自定义类型而不是内置类型怎么办?
无所谓.(值得庆幸的是,C++在内置函数和UDT之间没有什么区别.)
当变量x将被构造并且被破坏时?
之前建造main()被称为,之后被毁坏.跨多个翻译单元构造全局变量的顺序是不确定的.在同一个TU中,它是定义的顺序.(或者声明?我忘记了.)破坏的顺序是明确定义的,并且一如既往地是逆向构造顺序.
sizeof(Widget)和这些变量之间有任何关系吗?
为什么类X和Y不同类型的变量之间存在关系?
C++标准中定义了哪些方面,哪些方面没有?
基本上,未命名的命名空间中的全局变量是普通的全局变量.只有它位于具有"有趣"名称的命名空间中,您无法拼写出来并且其翻译单元是唯一的.
| 归档时间: |
|
| 查看次数: |
4071 次 |
| 最近记录: |