跳转至

cpp匿名命名空间

注意几个要点:

  • 匿名命名空间在每个翻译单元(即 .cpp 文件)中都是唯一的
  • 编译器会为每个包含匿名命名空间的翻译单元生成一个唯一的内部名称
  • 匿名空间的函数internal linkage, 每个.cpp拿到的是独立的副本,不冲突也不共享。

foo.hpp

#pragma once
namespace {
    void foo() {
        // do something
    }
}

a.cpp

#include "foo.hpp"
void testA() {
    foo();
}
b.cpp
#include "foo.hpp"
void testB() {
    foo();
}

a.cppb.cpp有独立的foo函数.