诚然,这样做的原因现在已经消退,因为 C++11 已经摆脱了那个讨厌的规则——我认为它声明 static const int/char/enum 允许你在标题中初始化,但对于所有其他类型,你不能。因此,我想尝试总结 C++ 的声明和定义约定。
是否有人能够接受我在下面尝试/做的事情并将其扩展为我错过/不正确的任何事情。我想总结一下各种静态/常量/整数/非整数变量的声明和定义的所有“规则”。理想情况下,这可以放入具有 3 列的某种表中:数据类型/声明/定义 - 但我不知道如何在此处执行此操作:
静态数据成员(声明)
- 只提供类型和名称,不要初始化,因为使用相同标题的多个文件最终会产生多个副本。
静态数据成员(定义)
- 初始化源文件中的变量。不必在源文件定义中重复“静态”一词。
const 数据成员(声明)
- 使用关键字 const 在头文件中声明但未初始化。
const 数据成员(定义)
- 必须使用构造函数中的初始化列表进行初始化。
静态和常量数据成员(声明)
- 使用关键字 static 和 const 在头文件中声明,但未初始化。
静态和常量数据成员(定义)
- 在源文件中定义。不需要使用关键字 static 和 const (??)。
注意:我知道 C++11 之前的 int/enum/char 曾经有一个关于静态的特殊规则(或者是静态常量?),它们可以在标题中初始化吗?
- 全局变量规则
- 可变规则
- 外部规则
- volatile 是否遵循与“const”完全相同的规则?静态 volatile 会遵循静态数据成员等的约定吗?