-1

诚然,这样做的原因现在已经消退,因为 C++11 已经摆脱了那个讨厌的规则——我认为它声明 static const int/char/enum 允许你在标题中初始化,但对于所有其他类型,你不能。因此,我想尝试总结 C++ 的声明和定义约定。

是否有人能够接受我在下面尝试/做的事情并将其扩展为我错过/不正确的任何事情。我想总结一下各种静态/常量/整数/非整数变量的声明和定义的所有“规则”。理想情况下,这可以放入具有 3 列的某种表中:数据类型/声明/定义 - 但我不知道如何在此处执行此操作:

静态数据成员(声明)

  • 只提供类型和名称,不要初始化,因为使用相同标题的多个文件最终会产生多个副本。

静态数据成员(定义)

  • 初始化源文件中的变量。不必在源文件定义中重复“静态”一词。

const 数据成员(声明)

  • 使用关键字 const 在头文件中声明但未初始化。

const 数据成员(定义)

  • 必须使用构造函数中的初始化列表进行初始化。

静态和常量数据成员(声明)

  • 使用关键字 static 和 const 在头文件中声明,但未初始化。

静态和常量数据成员(定义)

  • 在源文件中定义。不需要使用关键字 static 和 const (??)。

注意:我知道 C++11 之前的 int/enum/char 曾经有一个关于静态的特殊规则(或者是静态常量?),它们可以在标题中初始化吗?

  • 全局变量规则
  • 可变规则
  • 外部规则
  • volatile 是否遵循与“const”完全相同的规则?静态 volatile 会遵循静态数据成员等的约定吗?
4

1 回答 1

0

在 C++ 标准中,const并且volatile几乎总是“彼此相邻”。特别是,volatileconst具有相同的优先顺序和“需要位置”。

在 C++11 之前(当然也在 C++11 中),您可以初始化const static简单类型(例如,int或密切相关的类型,但不能初始化其他类型(例如,那些具有构造函数的类型)。

于 2013-07-20T19:08:09.600 回答