【发布时间】:2014-04-15 07:11:33
【问题描述】:
具体来说,假设我有:
struct X { X(int i) { cout << i; } };
int f() { cout << 'f'; return 0; }
int g() { cout << 'g'; return 1; }
struct Z {
Z() : a(f()), b(g()) {}
X a, b;
};
int main() { Z z; cout << '\n'; }
我知道成员的构造函数保证按照它们在struct 中定义的顺序被调用,所以0 将在1 之前打印。
但是如何评价他们的论点呢?是否保证:
f0g1
?或者,也许,
fg01
和
gf01
也是有效的输出?
对标准的参考表示赞赏。
【问题讨论】:
-
@ShafikYaghmour:我并不关心标准之间的差异。重要的是意图,很可能没有改变,只是变得更加清晰。
-
有道理,据我所知,行为应该是相同的,并且正如您所建议的那样,C++11 只是明确表示。
标签: c++ constructor member language-lawyer