关于以下两种初始化POD成员变量的方法:
class Trie {
Trie()
: isWord_(false)
{ }
vector<Trie *> child(keyLength);
bool isWord;
};
// OR
class Trie {
Trie();
vector<Trie *> child(keyLength);
bool isWord = false;
};
这两个是等效的(性能明智,生成的代码大小明智等)? 目前有偏好吗?
答案 0 :(得分:1)
我会参考这篇文章 Get to Know the New C++11 Initialization Forms获取答案。
它们在语义上是等价的,正如文章所述:
无论使用的初始化形式如何,编译器在概念上都是如此 将每个类成员初始化程序转换为相应的 MEM-INIT
然而,如果我们超出POD范围,第二个选项允许的某些东西对于第一个选项是不可能的。例如:数组初始化。
至于目前的偏好,总是存在一个强烈的论据,即让你的代码对其他人可读:
我的个人偏好仍然是第一选择,因为有了它我在一个地方(构造函数)有关于类初始化的所有信息,并且不必一直滚动到底部以查看是否有人突然在那里进行了默认初始化。