C++风格指南 2、作用域

2.1. 命名空间

这段文字的关键内容概括如下:

1. 命名空间的使用:除了少数特殊情况外,代码应在命名空间内,命名空间名称应唯一,包含项目名和可选的文件路径。

2. 禁止使用:
   - `using` 指令引入整个命名空间。
   - 内联命名空间。

3. 命名空间定义:命名空间用于划分全局作用域,防止命名冲突。

4. 优点:避免大型程序中的命名冲突,允许使用简短名称。

举例来说, 若两个项目的全局作用域中都有一个叫 Foo 的类 (class), 这两个符号 (symbol) 会在编译或运行时发生冲突. 如果每个项目在不同的命名空间中放置代码, project1::Foo 和 project2::Foo 就是截然不同的符号, 不会冲突.

内联命名空间会自动把其中的标识符置入外层作用域, 比如:

namespace outer {
inline namespace inner {
    void foo();
}  // namespace inner
}  // namespace outer

此时表达式 outer::inner::foo() 与 outer::foo() 等效.

5. 缺点:
   - 难以理解,难以找到标识符的定义。
   - 内联命名空间更难理解,标识符出现在多个作用域。

6. 使用建议:
   - 遵守命名空间命名规则。
   - 在文件末尾注释命名空间名称。
   - 在导入语句后,用命名空间包裹整个源代码文件。

7. 复杂文件处理:更复杂的 `.cc` 文件可能包含旗标、`using` 声明等,在命名空间内处理。

8. Proto 消息命名空间:使用 `package` 修饰符将自动生成的 proto 消息代码放入命名空间。

9. std 命名空间:不在 `std` 命名空间内声明任何东西不前向声明标准库类

10. using 指令:禁止使用 using 指令 引入命名空间的所有符号。

/ 禁止: 这会污染命名空间.
using namespace foo;

11. 命名空间别名:可以在内部使用的命名空间内使用别名,不在头文件引入别名作为公开 API。

12. 内部命名空间:如果命名空间名称包含 "internal",则不应由用户使用这些 API。

13. 单行嵌套命名空间声明:鼓励使用,但不强制。

例如

namespace foo::bar {
...
}  // namespace foo::bar

2.2. 内部链接</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值