生命周期和作用域
一个在所有函数外部定义的变量具有“静态生命周期”(它将在整个程序的运行期间存在)。一个在函数内部定义的变量也可以具有静态生命周期,但它需要使用 static 关键字进行标记。否则,它将是一个短暂的“局部变量”,其存储将在该函数结束时消失。

在函数内部定义的变量具有“局部作用域”(它只能在该函数内部使用,无论其生命周期如何)。在所有函数外部定义的变量具有“全局作用域”(它可以被所有后续函数使用)。如果你使用 static 关键字标记一个全局作用域的变量,那么它只能在这个源文件中使用。

初始化
一个常量变量(用 const 关键字标记)必须初始化。如果一个具有静态生命周期的变量没有手动初始化,那么它将自动初始化为 0。如果一个局部对象变量没有手动初始化,那么它的默认构造函数将会构造它。如果一个局部原始类型变量没有手动初始化,那么它的值将是未定义的,直到有值被赋给它。

统一初始化
你可以使用三种不同的语法来初始化变量:传统的“隐式初始化”(int iVar = 11;)、传统的“显式初始化”(int iVar(11);)以及现代的“统一初始化”(int iVar {11};)。

不通过构造函数初始化
传统上,数据成员通过将参数传递给自定义构造函数来初始化,构造函数会将这些参数值复制给数据成员。

在现代 C++ 中,你也可以选择使用默认构造函数,并将这些值作为初始化列表进行指定。这个大括号括起来的列表中的项将根据类定义中的成员顺序赋值给数据成员。

解构 Auto
语句 auto[iDesti, fDesti] = oSource; 同时定义了两个变量(iDestifDesti),并将它们分别初始化为右侧相应的值。右侧的值可以是 std::tuple<int, float>,也可以是一个对象(该对象的第一个数据成员是 int 类型,第二个数据成员是 float 类型)。

同时定义和类型
程序员通常会将类(class CRType {...};)的定义与使用该类名定义对象(后续的 CRType oObject; 语句)分开。然而,也可以将它们合并为一行代码(class CRType {...} oObject;)。

最后修改: 2025年01月17日 星期五 22:18