使用具有默认成员初始化变量的默认成员初始化程序合法吗?

时间:2019-06-07 15:23:50

标签: c++ c++11 language-lawyer c++17 member-initialization

以下代码在使用时会意外失败:

struct Foo {
  std::string b = a + " world"; // a not declared yet
  std::string a = "Hello";
};

由于[class.base.init]/13.3,由于定义a,我们正在尝试使用struct Foo { std::string a = "Hello"; std::string b = a + " world"; };

  

然后,非静态数据成员按照它们在类定义中声明的顺序进行初始化(同样,无论 mem-initializers 的顺序如何)。

但是这段代码呢?

var stockFiles = System.IO.Directory.GetFiles(fullDirectoryPath, "Open25_Stock*");

13.3在这里似乎也很合理(使代码定义良好),但是我不确定它是否涵盖了上面清单中的情况,因为它提到了mem-initializers但错过了这个特定的案(IMO)。我承认这可能只是缺乏英语能力,所以我更愿意问。

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

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

0 个答案:

没有答案