Skip to content

嵌套命名空间(C++17)

一句话

namespace A::B::C { ... } 一行替代三层嵌套的大括号——纯粹的语法糖,但极大减少缩进层级。

头文件

无(语言特性)

核心 API 速查

语法等价写法
namespace A::B { ... }namespace A { namespace B { ... } }
namespace A::B::C { ... }namespace A { namespace B { namespace C { ... } } }
namespace A::inline B { ... }namespace A { inline namespace B { ... } } (C++20)

最小示例

cpp
// Standard: C++17
#include <iostream>

// 嵌套命名空间定义
namespace hardware::spi {
    void init() { std::cout << "SPI init\n"; }
}

// 等价的 C++11 写法(效果完全相同)
namespace hardware {
    namespace i2c {
        void init() { std::cout << "I2C init\n"; }
    }
}

int main() {
    hardware::spi::init(); // SPI init
    hardware::i2c::init(); // I2C init
}

嵌入式适用性:低

  • 纯语法糖,不影响生成的代码,但嵌入式项目通常命名空间层级不深
  • 对大型库和驱动的代码组织有帮助,减少缩进嵌套
  • 嵌入式代码常使用较扁平的命名空间(如 bsp::hal::),单一层级即够用
  • C++17 编译器普遍支持,无兼容性顾虑

编译器支持

GCCClangMSVC
73.919.1

另见


部分内容参考自 cppreference.com,采用 CC-BY-SA 4.0 许可

基于 VitePress 构建