C++ 类POD成员变量初始化

C++ 类POD成员变量初始化,c++,c++11,C++,C++11,关于以下两种初始化POD成员变量的方法: class Trie { Trie() : isWord_(false) { } vector<Trie *> child(keyLength); bool isWord; }; // OR class Trie { Trie(); vector<Trie *> child(keyLength); bool isWord = false; }; class-Trie{ Trie()

关于以下两种初始化POD成员变量的方法:

class Trie {
  Trie()
    : isWord_(false)
  { }


  vector<Trie *> child(keyLength);
  bool isWord;
};

// OR 

class Trie {
  Trie();

  vector<Trie *> child(keyLength);
  bool isWord = false;
};
class-Trie{
Trie()
:isWord_(false)
{ }
向量子(键长);
布尔语;
};
//或
三类{
Trie();
向量子(键长);
bool-isWord=false;
};
这两种方法是否等效(性能方面,生成的代码大小方面,等等)?
目前是否有偏好?

我会参考这篇文章的答案

正如该条所述,它们在语义上是等价的:

无论使用何种初始化形式,编译器在概念上 将每个类成员初始值设定项转换为相应的 内存初始化

然而,有一些事情是第二种选择所允许的,如果我们超出POD范围,第一种选择是不可能的。例如:数组初始化

对于当前的首选项,始终有一个强有力的理由是让您的代码对其他人可读:

  • 如果你在做一个大项目,坚持项目的其他部分所遵循的任何形式,不要在不需要的地方强加新的想法
  • 如果你的项目很小,如果你认为一个比另一个更具可读性的话,试着和其他最终用户谈谈,就共同的形式达成一致

我个人的偏好仍然是第一个选择,因为有了它,我就可以在一个地方(构造函数)获得所有关于类初始化的信息,而不必一直滚动到底部查看是否有人突然在那里进行了默认初始化。

它们是不同的东西。一个用于单个构造函数,另一个用于所有构造函数。与POD无关,在这两种情况下,询问者都在初始化POD数据类型。我相信他们想知道优点和缺点。如果他们产生不同的代码,我会很失望。同意你的说法,但添加一个偏差:如果默认初始化可以消除对构造函数的需要,那么使用默认初始化并省略构造函数。另外,如果你有许多细节不同的构造函数,这些就地初始化器是一种非常方便的形式。