【发布时间】:2024-04-19 17:45:01
【问题描述】:
标准中具体涵盖了哪些内容?我找到了§9.2/10:Non-static (9.4) data members shall not have incomplete types. In particular, a class C shall not contain a non-static member of class C, but it can contain a pointer or reference to an object of class C.,但这似乎并不直接支持手头的问题。
#include <iostream>
struct A{
int i;
static A a;
};
A A::a{10};
int main() {
std::cout << A::a.i << '\n';
}
【问题讨论】:
-
我认为这是因为当你 declare
a它有一个不完整的类型,但由于它是一个静态变量,编译器不需要知道它的大小,直到它 定义,当A类型定义明确且完整时发生。 -
我特别喜欢
struct A { static A a; } A::a;:)
标签: c++ c++11 static-members language-lawyer