Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
从聚合初始化,将指针设置为 struct member,以下代码是合法的:
struct S { int a; int* aptr; }; S s = { 3, &s.a };
引用最新标准草案:
[basic.scope.pdecl] 名称的声明点紧跟在它的完整声明符 ([dcl.decl])之后和它的初始化器(如果有的话)之前,除非如下所述。
[basic.scope.pdecl]
名称的声明点紧跟在它的完整声明符 ([dcl.decl])之后和它的初始化器(如果有的话)之前,除非如下所述。
所以,是的。标识符s已被声明,因此可以在其初始化程序中使用。
s
请注意,在s初始化之前可能不会使用 的值。示例中未使用该值,因此这不是问题。
我也很好奇当 S 的两个成员顺序相反时类似的代码是否有效
成员的顺序无关紧要。