类POD成员变量初始化

时间:2018-03-25 17:46:33

标签: 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;
};

这两个是等效的(性能明智,生成的代码大小明智等)? 目前有偏好吗?

1 个答案:

答案 0 :(得分:1)

我会参考这篇文章 Get to Know the New C++11 Initialization Forms获取答案。

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

  

无论使用的初始化形式如何,编译器在概念上都是如此   将每个类成员初始化程序转换为相应的   MEM-INIT

然而,如果我们超出POD范围,第二个选项允许的某些东西对于第一个选项是不可能的。例如:数组初始化。

至于目前的偏好,总是存在一个强烈的论据,即让你的代码对其他人可读:

  • 如果您正在开展一个大型项目,请坚持项目其余部分所遵循的任何形式,不要在他们不想要的地方强制执行新想法
  • 如果您的项目规模较小,请尝试与其他最终用户交谈,以便在您认为其中一种形式比其他形式更具可读性时同意。

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