无法识别初始化类型

时间:2016-06-26 15:29:09

标签: c++ initialization

我遇到了这段代码,并意识到我不记得使用的初始化类型,也不记得它的假设行为。
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);
}

2 个答案:

答案 0 :(得分:4)

因为Point p = (3, 2);没有用2个参数调用构造函数,而是用1个参数2调用它。这是因为逗号运算符,它基本上抛弃了第一个表达式(3)的结果,并返回最后一个(2)。 / p>

因此使用一个传递的参数调用构造函数,在本例中为2,并使用默认参数5

如果你想用2个参数调用构造函数,你有几个选择:

  • Point p(3, 2);
  • Point p = Point(3, 2);
  • Point p = { 3, 2 };(C ++ 11)
  • Point p{ 3, 2 };(C ++ 11)

答案 1 :(得分:1)

Point p = (3,2)相当于Point p = 2,后者与Point p = Point(2)相同,因此观察到的行为。阅读C ++中的逗号运算符。