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