2

聚合初始化,将指针设置为 struct member,以下代码是合法的:

struct S 
{
  int a;
  int* aptr;
};

S s = { 3, &s.a };
4

1 回答 1

5

引用最新标准草案:

[basic.scope.pdecl]

名称的声明点紧跟在它的完整声明符 ([dcl.decl])之后和它的初始化器(如果有的话)之前,除非如下所述。

所以,是的。标识符s已被声明,因此可以在其初始化程序中使用。

请注意,在s初始化之前可能不会使用 的值。示例中未使用该值,因此这不是问题。

我也很好奇当 S 的两个成员顺序相反时类似的代码是否有效

成员的顺序无关紧要。

于 2020-02-12T15:11:12.597 回答