为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++ C C#
湖上湖 2019-05-23 13:24:24
构造函数中这个奇怪的冒号成员(“:”)语法是什最近我见过如下例子:#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条目的主要内容是,

在所有其他条件相同的情况下,如果使用初始化列表而不是赋值,则代码将运行得更快。


查看完整回答
反对 回复 2019-05-23
?
有只小跳蛙

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

这完全取决于效率。


查看完整回答
反对 回复 2019-05-23
  • 3 回答
  • 0 关注
  • 752 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信