【发布时间】:2018-01-20 10:36:35
【问题描述】:
标准在哪里定义了冲突声明?
例如,如果我在命名空间范围内有以下声明:
extern const int a;
extern int a;
这将是一个冲突声明的例子。
【问题讨论】:
-
既然你的问题是“哪里?”,答案就在这里:[basic.scope]
-
@Oliv 好的,也许我在问题中的措辞是错误的。在提出这个问题之前,我阅读了您链接的部分内容,但我找不到任何明确的内容。您能否引用标准说重新声明必须就类型或类似内容达成一致?谢谢!
-
basic.def/1 一个声明可以在翻译单元中引入一个或多个名称,或者重新声明先前声明引入的名称。如果是这样,则声明指定这些名称的解释和属性您可以通过重新声明来指定解释和属性,但您不能更改已经指定的内容。 (这里你正在改变类型)
-
一些可能有帮助的相关注释:C 有“兼容类型”的概念,并明确表示引用同一对象的声明应具有兼容类型,但 C++ 没有。此外,还有一些特殊情况,允许对同一实体进行不同类型的声明。例如,
int[]和int[N]。 -
Yes.
标签: c++ language-lawyer declaration