【发布时间】:2012-12-29 12:35:42
【问题描述】:
可能重复:
Initializing fields in constructor - initializer list vs constructor body
在我参加的一次讲座中,讲师用 C++ 简要介绍了非默认类构造函数。他特别指出,一个版本优于另一个版本。他举了两个例子:
Point::Point(double x, double y, double z)
: x_(x), y_(y), z_(z)
{}
Point::Point(double x, double y, double z)
{ x_= x; y_= y; z_= z; }
他提到第一个示例(使用括号)是编写构造函数的首选方式。
我的问题是:有什么区别,为什么重要?第一个优于第二个在什么方面?
【问题讨论】:
-
第一个在某些情况下避免了初始化和赋值,并且是唯一适用于
const和引用成员的。第一个还可以提供对基类初始化和委托构造函数的访问。
标签: c++ class constructor