0

以下代码在使用时毫无疑问会失败:

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)。我承认这可能只是缺乏英语技能,所以我更愿意问。

标准中引用的段落是否使代码

  1. 定义明确(我的猜测)
  2. 未定义的行为
  3. 或者它是错误的段落?如果是这样,请指出我正确的位置。
4

0 回答 0