构造函数中这个奇怪的冒号成员(“:”)语法是什么?

构造函数中这个奇怪的冒号成员(“:”)语法是什

最近我见过如下例子:

#include <iostream>class Foo {public:
  int bar;
  Foo(int num): bar(num) {};};int main(void) {
  std::cout << Foo(42).bar << std::endl;
  return 0;}

这奇怪: bar(num)意味着什么?它似乎初始化成员变量,但我以前从未见过这种语法。它看起来像一个函数/构造函数调用,但对于一个int?对我没有任何意义。也许有人可以启发我。而且,顺便说一下,还有其他类似的深奥语言功能,你永远不会在一本普通的C ++书中找到它吗?

么?

湖上湖
浏览 753回答 3
3回答

慕雪6442864

这是一个成员初始化列表。您应该在任何好的C ++书籍中找到有关它的信息。在大多数情况下,您应该初始化成员初始化列表中的所有成员对象(但是,请注意FAQ条目末尾列出的例外情况)。FAQ条目的主要内容是,在所有其他条件相同的情况下,如果使用初始化列表而不是赋值,则代码将运行得更快。

有只小跳蛙

这是构造函数的初始化。这是在类构造函数中初始化成员的正确方法,因为它可以防止调用默认构造函数。考虑这两个例子://&nbsp;Example&nbsp;1Foo(Bar&nbsp;b){ &nbsp;&nbsp;&nbsp;bar&nbsp;=&nbsp;b;}//&nbsp;Example&nbsp;2Foo(Bar&nbsp;b) &nbsp;&nbsp;&nbsp;:&nbsp;bar(b){}在示例1中:Bar&nbsp;bar();&nbsp;&nbsp;//&nbsp;default&nbsp;constructorbar&nbsp;=&nbsp;b;&nbsp;&nbsp;//&nbsp;assignment在示例2中:Bar&nbsp;bar(b)&nbsp;//&nbsp;copy&nbsp;constructor这完全取决于效率。
打开App,查看更多内容
随时随地看视频慕课网APP