重新声明类类型的名称

时间:2014-05-05 07:31:58

标签: c++ class declaration

考虑以下示例:

void foo()
{
    class A;
    class A;
}

int main()
{
    foo();
    return 0;
}

工作正常。为什么允许这种类型的重新划分?我很困惑......

UPD:请给我一个c ++规范的引用,如果可能的话,允许重新声明......

3 个答案:

答案 0 :(得分:1)

§3.1 声明(第7条)可以将一个或多个名称引入翻译单元或由先前声明引入的重新声明名称。

这是第一个条款。

第二个条款规定了什么声明。我没有在这里复制,因为它包含了不少例子。

答案 1 :(得分:1)

DeclarationDefinition是两个不同的概念。您可以在翻译单元中声明任意次数的名称。但该定义应该只出现一次。检查thisthis

答案 2 :(得分:1)

此外,如果每个类A在不同的cpp文件中声明为全局变量 如果用" -warn-common"

调用g ++,链接器将发出警告