匿名命名空间和c ++中的匿名范围有什么区别?

时间:2015-11-27 13:21:29

标签: c++ namespaces

有什么区别:

namespace {
    // code
} // anonymous namespace

{
    // code
}

我理解:

  1. 我们无法在函数
  2. 中编写命名空间
  3. 我们不能在函数外写匿名块
  4. 匿名命名空间寿命长,可以扩展;匿名范围不要,当它离开范围时,一切都会被销毁。
  5. 我错过了什么吗?

3 个答案:

答案 0 :(得分:4)

存在巨大差异。

匿名命名空间中的任何内容仅对该编译单元可见。 (它有点类似于static)的一个特定用途。您不能将语句放入匿名命名空间。

{ }是一个范围块。它可以包含语句

答案 1 :(得分:2)

namespace {}创建一个命名空间(名称空间),用于更改编译器找到声明的内容(在这种情况下,它是一个匿名命名空间,意味着内部声明的符号只能在当前编译单元中访问。

{}创建一个范围(可执行代码块),用于隔离内部的语句,并更改块中代码的执行方式。

第一个对编译器很重要,第二个在执行时很重要。它们完全不同。

答案 2 :(得分:1)

存在差异:匿名命名空间中定义的内容仍然存在于外部,尽管在块内创建的内容随着它的结束而消失。