在其类定义中声明非内联静态数据成员不是定义,并且可能是cv
void
以外的不完整类型。...
这意味着,这是一个有效的代码:
#include <iostream>
struct S
{
static S s;
};
S S::s;
int main()
{
std::cout << &(S::s) << '\n';
std::cout << &(S::S::s) << '\n';
}
&(S::s)
上面的代码段为和打印了相同的地址&(S::S::s)
。
允许在 C++ 中进行这种构造的原因是什么?