匿名命名空间 - 在头文件和代码文件中都有意义吗?

时间:2013-08-29 16:04:56

标签: c++ namespaces visibility

TEST.CPP

#include "test.hpp"

void f1() { }

namespace {
   void f2() {}
}

namespace test {
   void f3() { }
}

如果我错了,请纠正我,但是:

  • f1如果在头文件中声明使用extern语句,则可以从外部调用
  • f2无法从外部调用
  • 如果
  • f3在头文件中声明(并且正确加前缀 - test::),则可以从外部调用它。如果它没有在标题中声明,则无法调用它?

我是对的吗?

1 个答案:

答案 0 :(得分:3)

您的问题标题具有误导性。不要在标题中放置匿名命名空间。

无法从test.cpp外部调用

f2,更正。

如果有适当的声明,可以调用

f1f3。这些可以在标题中,但是没有什么能阻止其他.cpp文件只是将 的代码放在标题中,即使你没有提供。

此外,函数声明不需要extern

void f1();
namespace test {
  void f3();
}