这两个构造函数有什么区别?

1 c++ oop constructor variable-initialization

这两个构造函数有什么区别?

int x, y; //position 

BasePoint(int px, int py) : x(px), y(py) {} 
Run Code Online (Sandbox Code Playgroud)

int x, y; //position 

BasePoint(int px, int py)
{
    x = px;
    y = py;
}
Run Code Online (Sandbox Code Playgroud)

什么x(px), y(py)叫?我什么时候使用这种类型的变量初始化?

谢谢.

Naw*_*waz 6

第一个是做初始化使用initialization-list,和第二个是做赋值使用赋值运算符.

推荐第一个!

BasePoint(int px, int py) : x(px), y(py) {}
                          ^^^^^^^^^^^^^ this is called initialization-list!
Run Code Online (Sandbox Code Playgroud)

阅读此FAQ:我的构造函数应该使用"初始化列表"还是"赋值"?

FAQ答案始于:

初始化列表.实际上,构造函数应该初始化初始化列表中的所有成员对象.进一步讨论了一个例外[...]

阅读完整的答案.