繁体   English   中英

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

[英]Why does one have to repeat the const specifier at definition time, if declaration as const is done somewhere else?

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

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

class ex {
    const static int my_ex;
};

->在CPP文件中指定值

ex::my_ex = 32;  

然后出现错误“冲突声明”(以及“未命名类型”)。 我知道CPP文件中的定义也是一个声明 ,它确实会产生从链接器BUT看到的冲突,为什么仅关于const说明符(和类型)而不是静态说明符? 我只需要写

const int ex::my_ex = 32;

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

这是历史性的事情。

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

现在, static表示两种不同的情况,具体取决于放置的位置。 因此,您不能在此处编写static ,因为它意味着其他含义。 因此,这种语言不需要您,因为那很愚蠢。

除了这种推理, 事实就是这样 当您创建一种语言时,您会在规范的简单性与实现的简易性与使用的简单性之间取得平衡,并提出了一系列规则。 在某些时候,您必须停止争论“为什么”创建了一些微不足道的规则,然后继续编写程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM