编译:
class Node{
int m = 0;
static unsigned f(){
return 1;
}
public:
static unsigned a;
static unsigned b;
};
unsigned Node::a = sizeof(m); // <= !!!
unsigned Node::b = f(); // <= !!!
int main(){
}
为什么?我知道
sizeof
不是函数,但 m
和 f()
仍然不是私有的?
绝对不是一个错误,因为在 gcc、msvc、clang 和 intel c++ 上编译
更新: 另请注意,只是
sizeof(m)
而不是 sizeof(Node::m)
,与 f()
而不是 Node::f()
相同(Koenigs 查找?)
在静态数据成员的非内联定义中允许访问
private
成员,因为定义的 initializer 部分(即 =
的 RHS)在类,根据标准(“注释 1”,见下文):
11.4.9.3 静态数据成员 [class.static.data]…
3 类定义中非内联静态数据成员的声明不是定义,并且可能是除 cv void 之外的不完整类型。
[注1:静态数据成员定义中的初始值设定项位于其类的范围内([basic.scope.class])。 — 尾注] …