为什么必须在定义时重复const说明符,如果声明为const在其他地方完成?

C. *_*HIN 1 c++ static const declaration definition

解决这个简单的问题后,我不得不问:

- >在类的H文件中,定义了一个const静态成员,例如:

class ex {
    const static int my_ex;
};
Run Code Online (Sandbox Code Playgroud)

- >在CPP文件中指定值

ex::my_ex = 32;  
Run Code Online (Sandbox Code Playgroud)

然后一个人得到错误"冲突的声明"(以及"不命名类型").我理解CPP文件中的定义也是一个声明,它确实会产生从链接器看到的冲突,但为什么只关于const说明符(和类型)而不是静态的?我只需要写

const int ex::my_ex = 32;
Run Code Online (Sandbox Code Playgroud)

让它编译.但不是静态的......为什么不呢?为什么我不能只定义和不重复声明相关的步骤(类型,特定标识符)?

Lig*_*ica 9

这是历史性的事情.

由于C,static定义意味着"内部联系".当C++出现并且添加了类时,Bjarne需要一个关键字来表示静态成员.他不想添加新的关键词(这种偏好在今天仍然存在),而是重新使用了static.

现在static意味着两个不同的东西取决于你把它放在哪里.所以你不能static在这里因为它意味着别的东西.因此,语言不需要你,因为那将是愚蠢的.

除了这个推理,它只是.当您创建一种语言时,您可以平衡规范的简单性与实现的简单性和使用的简单性,并且您提出了一组作为语言的规则.在某些时候,你必须停止争论"为什么"创建一些无关紧要的规则,然后继续编写你的程序.