首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能以内联方式重新打开非内联命名空间。

不能以内联方式重新打开非内联命名空间。
EN

Stack Overflow用户
提问于 2020-06-10 06:51:22
回答 1查看 326关注 0票数 1

我很难理解编译器的抱怨:

代码语言:javascript
复制
namespace
{
}

inline namespace
{
}

gcc说

必须在初始定义处指定

内联命名空间。

MSVC说标题里有什么。

我的混乱来自于我的预期,即接下来的两个匿名命名空间应该被视为一个无关新空间的新声明,但是编译器抱怨说它们以某种方式被链接起来,就像它试图用第二个空间扩展第一个名称空间一样。

https://godbolt.org/z/rwAYLg

EN

回答 1

Stack Overflow用户

发布于 2020-06-10 07:13:03

翻译单元中的每个匿名命名空间都是相同的命名空间。

适用于:

代码语言:javascript
复制
namespace
{
  struct F {};
}

namespace
{
  struct G {};
}

编译器有效地生成如下内容:

代码语言:javascript
复制
namespace __mytranslation_unit_anonymous_namespace
{
  struct F {};
}

namespace __mytranslation_unit_anonymous_namespace
{
  struct G {};
}

FG都位于同一个名称空间中。如果将代码复制到新的翻译单元,编译器将生成一个新的命名空间名称,例如__mytranslation_unit2_anonymous_namespace

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62297485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档