我尝试这样做:
file.h
namespace {
void fun();
const bool nevermind = Register( fun );
}
file.cpp
namespace {
void fun() {
do_some_job();
}
}
有链接错误。链接器找不到函数void fun()。
如果我尝试这样做:
file.h
namespace {
void fun() {
do_some_job();
}
const bool nevermind = Register( fun );
}
一切顺利。
如何编译第一个案例?我不想在* .h文件中有函数定义。
答案 0 :(得分:2)
匿名命名空间的目的是阻止您在其他任何地方使用该功能。因此,在标题中定义它没有什么意义。我假设每当你添加一个匿名命名空间时,编译器实际上将它视为具有乱码唯一名称的命名空间。因此,当您添加另一个匿名命名空间时,它不是同一个命名空间。
另请参阅下面的BoBTFish评论,澄清了这一点。