我遇到了这段代码,意识到我无法记忆起所使用的初始化类型,也无法记忆起它的假定行为。Point p=(3,2);似乎仅将后者的值(在这种情况下为2)作为构造函数的参数传递,因此PrintOut显示类似于x=2 y=5的内容,而不是预期的x=3 y=2

class Point{
public:
    Point(int x=5,int y=5):a(x),b(y){};
    void printOut()const{
        cout<<"x= "<<a<<"y= "<<b<<endl;}
private:
     int a,b;
};

void main(){
    Point p=(3,2);
}

最佳答案

因为Point p = (3, 2);不会使用2个参数调用构造函数,而是使用1个参数2调用它。这是因为逗号运算符,该运算符基本上将第一个表达式(3)的结果丢弃,并返回最后一个表达式(2)。

因此,使用一个传递的参数(在这种情况下为2)调用了构造函数,并使用了默认参数5

如果要使用2个参数调用构造函数,则有多种选择:

  • Point p(3, 2);
  • Point p = Point(3, 2);
  • Point p = { 3, 2 };(C++ 11)
  • Point p{ 3, 2 };(C++ 11)
  • 10-06 12:42
    查看更多