繁体   English   中英

类POD成员变量初始化

[英]Class POD member variable initialization

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

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


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

// OR 

class Trie {
  Trie();

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

这两个是否相等(在性能方面,在生成代码大小方面等)? 当前有偏好吗?

我将参考本文“了解新的C ++ 11初始化表格”以获取答案。

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

无论使用哪种初始化形式,编译器都会在概念上将每个类成员初始化程序转换为相应的mem-init

但是,如果我们超出了POD范围,则第二个选项允许有些事情对于第一个选项是不可能的。 例如:数组初始化。

至于当前的偏好,总是有一个很强的论据可以使您的代码对其他人可读:

  • 如果您正在从事大型项目,请遵循项目其余部分遵循的任何形式,不要在不需要的地方实施新想法
  • 如果您的项目很小,如果您认为一个项目比其他项目更具可读性,请尝试与其他最终用户交谈,以商定通用格式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM