这两者之间有什么不同?
cpp 文件:
cpp 文件:
namespace
{
int var;
}
或者int var;
如果两者都放在cpp文件中,是否正确将变量放在匿名命名空间中,以使其仅对该文件私有?但是,如果我们将全局变量放在cpp文件中,那么该变量不也是私有的,因为您永远不会包含.cpp文件吗?
namespace
{
int var;
}
或者int var;
如果两者都放在cpp文件中,是否正确将变量放在匿名命名空间中,以使其仅对该文件私有?但是,如果我们将全局变量放在cpp文件中,那么该变量不也是私有的,因为您永远不会包含.cpp文件吗?
extern int var;
,它将能够使用您的变量。.cpp
文件可以这样访问变量:extern int var;
var = 42;
链接器将会找到它。在第一种情况下,变量名已经被混淆了,无法理解 :) 因此上述操作是不可能的。
extern int var;
来访问它,即使他们不这样做,如果其他人在全局命名空间中使用相同的名称,你将会得到一个链接错误(多次定义的符号)。两点需要注意:
extern int var;
变量没有在未命名的命名空间中,任何人都可以访问它。int var
,则会出现此变量的多个定义。根据规范:
在翻译单元中所有唯一的出现都将被替换为相同的标识符,并且该标识符与整个程序中的所有其他标识符都不同。
.cpp
文件中,那么没有人会在其命名空间中拥有它。相反,如果你将匿名命名空间放入.h
文件中,当你包含头文件时就无法操作其中的任何内容。声明一个类不会向你的目标文件添加符号,而变量和函数会这样做。 - Dacav