类声明或定义中的静态变量?

Who*_*ami 12 c++ static-members

我是C++的新手.
我有一个这样的课:

class CodeTest
{
private:
    static const int TOTAL=100;
};
Run Code Online (Sandbox Code Playgroud)

TOTAL一个声明定义

当我阅读Scott Meyer的书时,有人提到在实现文件中我们需要定义如下内容:

const int CodeTest::TOTAL;
Run Code Online (Sandbox Code Playgroud)

为什么需要这个?

Kon*_*lph 10

标头之外的实现文件中的声明是必需的,因为否则包含此标头的每个转换单元都将定义其自己的对象(即,它自己的变量存储).

这将违反一个定义规则.结果将是例如,如果变量在一个翻译单元中被改变,则该改变对于其他翻译单元是不可见的.现在,由于变量是常数,因此不相关.但是,获取其地址也会在不同的翻译单元中产生不同的指针.