重新声明的静态类变量

时间:2018-02-01 19:43:52

标签: c++

我正在审核我下载的一些代码,我看到以下内容:

class MyClass
{
[...]
    public:
        static double shape;
[...]
};
double MyClass::shape = 1.0;

类型被声明两次似乎很奇怪。为什么这有必要?

1 个答案:

答案 0 :(得分:4)

类定义中的声明是一个纯粹的声明。

类定义后的声明是一个定义。它为变量分配存储空间。

这样做的一个原因是,对于static数据成员,只有整数或enum类型,或constexprC++17 inline的成员才能初始化课堂宣言。

上述定义不应放在头文件中,因为如果该标题包含在多个翻译中,则多个定义将违反一个定义规则。

一个简单的解决方案是使用访问器函数替换直接static变量:

// OK to place in a header:

class MyClass
{
public:
    static auto shape()
        -> double&
    {
        static double the_shape = 1.0;
        return the_shape;
    }
};
相关问题