» C++快速入门 » 2. 高级篇 » 2.2 命名空间

命名空间与模块

命名空间

命名空间 用于组织代码并防止命名冲突。它允许开发者将相关的代码组合到同一个空间中,避免在使用不同库或组件时可能发生的命名冲突。

#include <iostream>

// 第一个名为 'Math' 的命名空间,包含一个名为 'operation' 的函数
namespace Math {
    int operation(int a, int b) {
        return a + b;
    }
}

// 第二个名为 'Utility' 的命名空间,包含一个名为 'operation' 的函数
namespace Utility {
    int operation(int a, int b) {
        return a * b;
    }
}

int main() {
    // 通过使用命名空间解决命名冲突
    int sum = Math::operation(3, 4);
    int product = Utility::operation(5, 2);

    // 显示结果
    std::cout << "Sum: " << sum << std::endl;
    std::cout << "Product: " << product << std::endl;

    return 0;
}

模块

大多数 C++ 项目由用多个源文件(更确切地说,翻译单元)组成,因此经常需要在这些单元之间共享声明和定义。为此,传统 C++ 广泛使用头文件来引入共享的声明和定义。最经典的例子就是标准库,其声明可以通过包含相应的头文件提供。

C++20 引入了模块(Modules)。这是一个现代解决方案,将 C++ 库和程序转化为组件,并借此消除、减少了许多与使用头文件相关的问题,还可以缩短编译时间。

// 模块接口文件(module.h)
export module mymodule;

export int add(int a, int b);
// 模块实现文件(module.cpp)
module mymodule;

int add(int a, int b) {
    return a + b;
}
// main.cpp
import mymodule;

int main() {
    int result = add(3, 4);
    return 0;
}