在一个较大的项目中,不同开发者可能会定义同名的变量、函数或类。例如,两个人都定义了一个名为 show() 的函数:

void show() {
    std::cout << "Hello";
}

如果这些代码被编译到同一个程序中,编译器将无法区分它们,从而产生Name Collision。
为了解决这一问题,C++ 引入了 命名空间(Namespace)。
命名空间 可以理解为一个独立的名字作用域。同一个名字只要位于不同的命名空间中,就不会发生冲突。

namespace Alice {
    int value = 42;

    void show() {
        std::cout << "Alice: " << value << std::endl;
    }
}

namespace Bob {
    int value = 100;

    void show() {
        std::cout << "Bob: " << value << std::endl;
    }
}

虽然 Alice 和 Bob 中都定义了 value 和 show(),但由于它们属于不同的命名空间,因此可以同时存在。
如果需要访问其中的成员,只需使用作用域解析运算符(::) 指定命名空间。
命名空间可以理解为一个独立的名字作用域。同一个名字只要位于不同的命名空间中,就不会发生冲突。

Alice::show();
Bob::show();

std::cout << Alice::value << std::endl;
std::cout << Bob::value << std::endl;
谨慎使用 using namespace

在头文件中,不要使用using namespace std;
因为头文件会被多个源文件包含,这会把整个 std 命名空间引入所有包含它的文件,增加命名冲突的风险。