我应该在实现文件中使用未命名的名称空间吗?

2024-03-23

我在外部 *.cpp 文件中定义了一些函数(这里不涉及类),当然还有一个合适的 *.h 文件。

使用了*.cpp文件中的一些函数only在该 *.cpp 文件中没有其他地方。它们甚至没有在 *.h 文件中提及。

我应该将这些函数放入未命名的命名空间中,还是可以将它们放在其他函数旁边?如果是这样,为什么我需要为它们提供一个未命名的名称空间?我看不出有什么问题,因为无论如何都无法从外部访问这些功能。


如果您希望它们对于该编译单元来说是真正私有的,请将它们放在匿名名称空间中。如果您不这样做,那么有人可以在其他地方声明这些函数并显式使用它们。

举个例子:

library.cpp:

// a "private" function here, in that it is not declared anywhere
void f() {}

namespace
{
   // same as above, except within an anonymous namespace
   void g() {}
}

client.cpp:

void f();

int main()
{
   // Can call f(), it's been declared and is now effectively "public"
   f();

   // compilation error, this has no idea what g() is, it's not declared 
   // in any scope that can be resolved here
   g();

   return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该在实现文件中使用未命名的名称空间吗? 的相关文章

随机推荐