如果构造函数是显式定义的,那么初始化类成员是强制性的吗
Is it mandatory to initialize class members if a constructor is explicitly defined?
我的大学课程书上说:
当为类声明构造函数时,类对象的初始化将成为强制性的。
链接到该书的特定页面。
我们可以声明什么都不做的构造函数,因此初始化肯定不是强制性的,或者是吗?
如果不是,作者的意思是,如果我们显式声明构造函数,那么在风格上我们应该初始化类成员吗?也就是说,这是一条规则还是一条准则?
如果:,我们必须初始化构造函数中的成员
- 成员没有默认构造函数
- 成员是引用/常量引用
- 成员为常量。(感谢阿努比斯先生)
如果我们不想有任何奇怪的行为,应该初始化成员如果:
- 成员是指针
- 成员为标准吊舱类型
当为类声明构造函数时,类对象的初始化将成为强制性的。
这是真的,但初始化不必是显式的。请注意术语objects
而不是member
。
类类型的成员将默认初始化,如果你没有明确这样做。
class A {};
class B
{
A a;
int x;
B()
{
//a is initialized here, although you didn't do it explicitly
//x is not initialized, nor is it mandatory to initialize it
//but x is not an object
}
};
当然,"强制性"是一个很强的词。初始化x
不是强制性的,但在初始化之前不能对其执行任何操作。:)
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- 同时具有"聚合初始化"和"模板推导"
- 初始化具有非默认构造函数的std::数组项的更好方法
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 在C和C++中初始化结构中的数组
- 变量可能尚未初始化[MIRA 2012规则9.1,强制性]
- 如果构造函数是显式定义的,那么初始化类成员是强制性的吗
- 当类内成员初始化是强制性的