Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 省略数据成员对象的初始值设定项列表项_C++ - Fatal编程技术网

C++ 省略数据成员对象的初始值设定项列表项

C++ 省略数据成员对象的初始值设定项列表项,c++,C++,我已经读到,强烈建议在创建类时初始化所有数据成员,无论其类型如何,并且构造函数的初始值设定项列表是执行此操作的最佳位置 作为对象的数据成员呢?假设该对象有一个足够的默认初始值设定项,从初始值设定项中省略它们是否被认为是良好的做法 例如: class A{ private: AnotherClass B; int x; public: A():x(5){} //B is never explicitly initialized }; 如果不使用成员初始值设定项列表初始化用户定义类型的

我已经读到,强烈建议在创建类时初始化所有数据成员,无论其类型如何,并且构造函数的初始值设定项列表是执行此操作的最佳位置

作为对象的数据成员呢?假设该对象有一个足够的默认初始值设定项,从初始值设定项中省略它们是否被认为是良好的做法

例如:

class A{
private:
  AnotherClass B;
  int x;
public:
  A():x(5){} //B is never explicitly initialized
};

如果不使用成员初始值设定项列表初始化用户定义类型的成员,则将调用该特定类型的默认构造函数来初始化成员对象

因此,只要您的成员有可用的默认构造函数,并且这是您的意图,就完全可以了

从初始值设定项中省略它们是否被视为良好做法?


这是一个选择和偏好的问题。对我来说,成员初始值设定项列表更直观,所以我更喜欢它们。

是的,非常好

假设您有一个非常复杂的类,它包含许多成员,其中大多数是对象,它们确实有默认构造函数。由于将调用它们的默认构造函数,所以您无需担心—它们仍将被初始化

建议初始化标准类型(如
int
bool
等)中的所有成员,因为它们没有默认值


在您的情况下-如果
B
没有默认构造函数,您将出现编译错误,然后必须在
a::a

中初始化
B
。上述讨论仅适用于您所质疑的特定情况,而不适用于在成员初始值设定项列表中初始化对象与在构造函数体中分配对象的优势。如果您初始化,例如,5个成员中的4个,我会很困惑,想知道你为什么错过了一个。键入a
B()
花费不多。@Boperson的观点很有道理,很难不同意。尽管如此,我还是发现自己忽略了
std::vector
成员之类的初始化,而默认初始化就足够了。只是其中之一。