匿名命名空间

Mer*_*rni 23 c++ namespaces

这两者有什么不同?

CPP文件:

namespace
{
    int var;
}
Run Code Online (Sandbox Code Playgroud)

要么

int var;
Run Code Online (Sandbox Code Playgroud)

如果两者都放在cpp文件中?我们在匿名命名空间中放置一个变量是不正确的,因此它可以仅用于该文件?但是,如果我们将一个全局变量放在一个cpp文件中,那个变量也不是私有的,因为你从来没有对.cpp文件进行包含吗?

Did*_*set 29

在第二种情况下,当您不使用匿名命名空间时,如果任何其他cpp文件声明了extern int var;,它将能够使用您的变量.

如果使用匿名命名空间,则在链接时,另一个cpp文件将生成未定义的引用错误.

  • 所以我认为你可以通过将变量设置为静态来获得相同的结果. (2认同)
  • 静态工作,但已弃用,因为它仅适用于变量.匿名名称空间可以包含其他内容,例如类定义. (2认同)