【发布时间】:2019-02-26 11:31:52
【问题描述】:
例如:
#include<iostream>
using namespace std;
class A
{
public:
A(){cout<<k<<endl;}//make some output
static int k;
};
A a;//before `k`'s definition
int A::k=666;
int main()
{
}
答案是否保证为666(我在gcc8.1.0中测试过答案为666)或导致未定义的行为?
更重要的是,在这个例子中,对象a和定义A::k在同一个翻译单元中,如果它们在不同的单元中会发生什么,因为
不同翻译单元中静态变量的初始化是不定序的
在我看来,由于在同一个TU中初始化顺序是固定的,所以上面例子的答案应该是未定义的。
【问题讨论】:
-
未定义的行为,多个翻译单元可能发生任何事情。
-
@MatthieuBrucher 如果他们在同一个 TU 怎么办?
-
@MatthieuBrucher 不重复。其实
within a single translation unit, initialization of these non-local variables is always sequenced。但是这个例子似乎遵守了这个规则。 -
@MatthieuBrucher 我问的是类对象和该类的静态成员之间的关系,这是该问题的一个特例。
标签: c++