【问题标题】:Two unnamed namespaces, defined in the same declarative region两个未命名的命名空间,在同一个声明区域中定义
【发布时间】:2014-08-16 02:16:27
【问题描述】:

考虑以下代码:

#include<iostream>

namespace
{
    int a = 5;
}

namespace
{
    int a = 5;
}
int main()
{ 
    int i=5;
    {
        std::cout << i;
    }
}

此代码无效。这是因为发生了a 的重新定义。但我预计这是有效的。实际上,秒。 3.3.6/1 说:

[...]由 original-namespace-name 表示的潜在范围是 由每个 命名空间定义在同一个声明区域中 原始命名空间名称.[...]

但未命名的命名空间定义不是 original-namespace-definition 和 sec. 7.3.1/1 说:

namespace-name:
    original-namespace-name
    namespace-alias
original-namespace-name:
    identifier

original-namespace-definition:
    inline_opt namespace identifier { namespace-body }

此外,秒。 7.3.1.1 说:

一个未命名的命名空间定义的行为就像它被替换了一样

inlineopt namespace unique { /* empty body */ }
using namespace unique ;
namespace unique { namespace-body }

当且仅当它出现在 unnamed-namespace-definition,所有出现的唯一性 翻译单元被相同的标识符替换,并且这个 标识符不同于整个程序中的所有其他标识符

这意味着两个未命名的命名空间具有不同的独特

你能解释一下我引用的代码中的行为吗?

【问题讨论】:

    标签: c++ namespaces unnamed-namespace


    【解决方案1】:

    就在你引用的那篇文章中:

    翻译单元中所有出现的唯一都被相同的标识符替换

    所以翻译单元中所有未命名的命名空间都是同一个。

    【讨论】:

    • 这是我的误会。非常感谢。
    猜你喜欢
    • 2021-11-10
    • 1970-01-01
    • 2015-05-10
    • 2020-12-03
    • 1970-01-01
    • 2012-07-19
    • 2015-10-20
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多