为什么类中不能有静态对象

Why can I not have a static object in a class?

本文关键字:静态 对象 不能 为什么      更新时间:2023-10-16

指以下内容:

class A { ... };
class B 
{
    static A a; // this fails
    ...
    static A& getA() { static A a; return a; } // this works
    ...
};
...
B b;
b.a  <-- gives error: undefined reference to B::a

为什么我不能在class Bstatic A,但从方法返回它是可以的?

[编辑]
只是一些奇怪的事情:

struct C
{
    static const int x = 5;
};
int main()
{
    int k = +C::x;
    std::cout << "k = " << k << "n";
    return 0;
}
output: k = 5

C::x 没有在实现范围内定义,也没有 C 的实例,但是,unary + C::x可以访问......!?

你肯定可以拥有它。

您可能忘记了在类外部定义对象(恰好一次):

class B { 
    // ...
};
A B::a;
编辑

:基于对问题的编辑,现在这基本上是一种确定性,而不仅仅是概率。