可能重复:
Why should I prefer to use member initialization list?
C++ - what does the colon after a constructor mean?
这是以下代码
class vector2d {
public:
double x,y;
vector2d (double px,double py): x(px), y(py) {}
我不明白这一行
vector2d (double px,double py): x(px), y(py) {}
与...相同
vector2d(double px,double py){ x=px;y=py;}?
或?
答案 0 :(得分:0)
是的,在你的例子中它是一样的。但是,有一个细微的差别:x(px)将x初始化为px,但x = px指定它。你不会知道double
变量的区别,但是如果一个类的x会有很大差异。让我们假设x是foo
类型的类:
x(px)将调用foo复制构造函数foo :: foo(foo& classToCopyFrom)。
另一方面, x = px会先调用foo
默认构造函数,然后调用foo
赋值运算符。
这是一个很好的理由,在大多数情况下你应该更喜欢x(px)。