我遇到了这段代码,意识到我无法记忆起所使用的初始化类型,也无法记忆起它的假定行为。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)