一、问题描述
今天在想通过默认无参的构造函数实例化一个对象时,发现根本没调用动,代码如下:
#include <iostream>
using namespace std;
class Point {
protected :
double x;
double y;
public :
Point(int a, int b) : x(a), y(b) {}
Point() {
Point(0, 0);
cout << "执行了无参构造函数" << endl;
}
void setX(double v) {
this->x = v;
}
double getX() {
return x;
}
void setY(double v) {
this->y = v;
}
double getY() {
return y;
}
};
int main() {
Point p();
return 0;
}
结果什么都没输出,没有预期的“执行了无参构造函数”这句话。
二、原因
当我把小括号去掉进行实例化后,发现就可以调用了。
int main() {
Point p;
return 0;
}
查阅资料发现,编译器将Point p();这条语句看做了一个函数声明。因此,如果以后要调用无参默认构造函数,不要加小括号即可。
文章讨论了在C++中通过默认无参构造函数实例化对象时,为何未执行无参构造函数的问题,指出编译器将`Pointp();`解析为函数声明,解决方法是实例化时不使用小括号。
3324

被折叠的 条评论
为什么被折叠?



