以下代码在使用时毫无疑问会失败:
struct Foo {
std::string b = a + " world"; // a not declared yet
std::string a = "Hello";
};
因为我们在a
定义它之前尝试使用它并且由于[class.base.init]/13.3:
然后,非静态数据成员按照它们在类定义中声明的顺序进行初始化(同样不管mem-initializers的顺序)。
但是这段代码呢?
struct Foo {
std::string a = "Hello";
std::string b = a + " world";
};
13.3 在这里似乎也很合理(使代码明确定义),但是我不确定它是否涵盖了上面清单中的情况,因为它提到了 mem-initializers 但错过了这个特定情况(IMO)。我承认这可能只是缺乏英语技能,所以我更愿意问。
标准中引用的段落是否使代码
- 定义明确(我的猜测)
- 未定义的行为
- 或者它是错误的段落?如果是这样,请指出我正确的位置。