构造函数中这个奇怪的冒号成员(“:”)语法是什最近我见过如下例子:#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 ++书中找到它吗?么?
3 回答
慕雪6442864
TA贡献1812条经验 获得超5个赞
这是一个成员初始化列表。您应该在任何好的C ++书籍中找到有关它的信息。
在大多数情况下,您应该初始化成员初始化列表中的所有成员对象(但是,请注意FAQ条目末尾列出的例外情况)。
FAQ条目的主要内容是,
在所有其他条件相同的情况下,如果使用初始化列表而不是赋值,则代码将运行得更快。
有只小跳蛙
TA贡献1824条经验 获得超8个赞
这是构造函数的初始化。这是在类构造函数中初始化成员的正确方法,因为它可以防止调用默认构造函数。
考虑这两个例子:
// Example 1Foo(Bar b){ bar = b;}// Example 2Foo(Bar b) : bar(b){}
在示例1中:
Bar bar(); // default constructorbar = b; // assignment
在示例2中:
Bar bar(b) // copy constructor
这完全取决于效率。
- 3 回答
- 0 关注
- 752 浏览
添加回答
举报
0/150
提交
取消