在全局空间中,在类的静态变量之前声明该类的对象是否定义良好
Is it well defined to declare an object of the class before its static variable in global space?
下面是计数对象的一个简单例子:
struct A
{
static int count;
A () { ++ count; }
};
现在,它的对象和static
成员被声明为:
A obj; // comes 1st
int A::count = 5; // comes 2nd
g++产生预期的结果。但既然A::count
的定义是在全局空间中的一个A
实例之后的,它不应该是未定义的行为吗?
这取决于情况。
3.6.2
具有静态的对象的存储存储持续时间(basic.stc.static)应初始化为零(dcl.init)在进行任何其他初始化之前位置零初始化和用常量初始化表达式统称为静态初始化;所有其他初始化是动态的初始化。POD类型的对象具有静态存储的(基本类型)用常量初始化的持续时间表达式(表达式常量)应为在任何动态之前初始化进行初始化。
由于POD是用常量表达式初始化的,因此它将被静态初始化,即在任何构造函数运行之前。改变这些条件中的任何一个,都可能出现意想不到的结果。
相关文章:
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 在这种情况下,java对象是否可以调用本机函数
- 堆分配的对象是否存在永不为空的唯一所有者?
- QFileSystemModel 对象是否会被删除?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 临时C++对象是否为左值?
- 为什么复制构造函数不需要检查输入对象是否指向自身?
- "this"指向的对象是否与 const 对象相同?
- 有什么方法可以检测我的类的对象是否在堆栈上创建
- 基类对象是否隐式添加到派生类中?
- 当 T 具有非平凡析构函数时,类类型 T 的对象是否可以常量初始化?
- 如何检查指针后面的对象是否有效或已删除?
- 谷神星求解器:残差函子使用的可变对象是否良好实践?还有什么其他选择
- 单一实例对象是否通过线程安全返回shared_ptr
- 对象是否保证在调用其成员函数之前被初始化
- 在另一个对象 B 中创建对象 A 时,对象 A 是否是对象 B 的本地对象,对象 A 是否会存在于对象 B 的实例化之外?
- 如何确定对象是否已分配成员
- 我们如何在c 中序列化或应对类的对象.是否有任何预定义的库
- 友元类对象是否可以在其成员函数中访问派生类对象的基类私有成员?