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

标签 c++ static constants declaration definition

解决后this simple issue ,我不得不问:

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

class ex {
    const static int my_ex;
};

->在CPP文件中指定了值

ex::my_ex = 32;  

然后出现“声明冲突”错误(以及“未命名类型”)。我知道 CPP 文件中的 definition 也是一个 declaration 从链接器来看它确实会产生冲突但是为什么只有 const 说明符(和类型)而不是 static 一个?我只需要写

const int ex::my_ex = 32;

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

最佳答案

这是历史的事情。

从 C 开始,定义上的 static 表示“内部链接”。当 C++ 出现并向其添加类时,Bjarne 需要一个关键字来表示静态成员。不想添加新的关键字(这种偏好至今仍然存在),他重新使用了 static

现在 static 意味着两种不同的东西,这取决于你把它放在哪里。所以你不能在这里写static,因为它会有别的意思。因此,该语言不需要您这样做,因为那样做很愚蠢。

除此之外,就是。当你创建一种语言时,你会在规范的简单性、实现的简单性和使用的简单性之间取得平衡,然后你会想出一套语言规则。在某些时候,您必须停止为“为什么”创建一些无关紧要的规则而争论不休,而只是继续编写您的程序。

关于c++ - 如果在其他地方声明为 const,为什么必须在定义时重复 const 说明符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36697711/

相关文章:

Chapel 中的静态类字段

C++ 在构造函数中定义 const

python - 我可以通过命令行参数将多少数据传递给 C++ 程序?

c++ - 从 init.d 脚本启动时程序无法打开文件

c++ - C++中用户定义类型的静态初始化

c++ - 为什么一个常量整数指针允许指向一个非常量整数?

PHP:带有未定义常量的 Switch 语句

c# - 针对 C++ 和 C# 的代码生成工具

java - 静态函数访问速度

c++ - 使用静态变量的递归调用的不同输出