如何调用类';由具有所有默认参数的ctor提供的默认构造函数? < C++ >第五版本中说,为所有参数提供缺省参数的构造函数也定义默认构造函数: class Point { public: //Point(); // no need to define it here. Point(int x = 0, int y = 0) : x_(x), y_(y){ std::cout << "Point(int=0, int=0)" << std::endl; } // synthesize default constructor Point() int x_; int y_; }; int main(){ Point pt; // default ctor Point() or Point(int, int)? Point pt2 = Point(); // this won't compile?! } 类点{ 公众: //Point();//不需要在这里定义它。 点(intx=0,inty=0):x(x),y(y){ std::cout

如何调用类';由具有所有默认参数的ctor提供的默认构造函数? < C++ >第五版本中说,为所有参数提供缺省参数的构造函数也定义默认构造函数: class Point { public: //Point(); // no need to define it here. Point(int x = 0, int y = 0) : x_(x), y_(y){ std::cout << "Point(int=0, int=0)" << std::endl; } // synthesize default constructor Point() int x_; int y_; }; int main(){ Point pt; // default ctor Point() or Point(int, int)? Point pt2 = Point(); // this won't compile?! } 类点{ 公众: //Point();//不需要在这里定义它。 点(intx=0,inty=0):x(x),y(y){ std::cout,c++,default-constructor,C++,Default Constructor,如果添加默认所有参数的构造函数,则它是默认构造函数 如果两者都需要,请删除一个或多个默认参数。一个类最多可以有一个默认构造函数。如果有参数的构造函数是默认构造函数,则可能没有不带参数的默认构造函数。否则,默认构造函数的调用是不明确的 那么,是否可以调用由为所有参数提供默认参数的构造函数提供的类的默认构造函数呢 好的,是的。在这种情况下,默认构造函数是为所有参数提供默认参数的构造函数。例如: class Point { public: Point(int x = 0, in

如果添加默认所有参数的构造函数,则它是默认构造函数


如果两者都需要,请删除一个或多个默认参数。

一个类最多可以有一个默认构造函数。如果有参数的构造函数是默认构造函数,则可能没有不带参数的默认构造函数。否则,默认构造函数的调用是不明确的

那么,是否可以调用由为所有参数提供默认参数的构造函数提供的类的默认构造函数呢

好的,是的。在这种情况下,默认构造函数是为所有参数提供默认参数的构造函数。例如:

class Point {
    public:
        Point(int x = 0, int y = 0);
};

int main(){
    Point pt; // the default constructor Point(int,int) is invoked
}

如果您添加一个默认所有参数的构造函数,它就是默认构造函数。@SidS:如果我这样做,它将不会编译,因为一个类不允许有多个默认构造函数。您希望编译器如何区分这两个构造函数?如果您同时需要默认构造函数和另一个构造函数,则需要去掉默认参数。你能解释一下,当有另一个构造函数对所有参数都有默认值时,为什么“出于某种原因”要调用构造函数
Point()
Point pt
Point pt2=Point()
)则没有参数的构造函数(
Point()
)和所有参数都默认的构造函数(
Point(int x=0,int y=0)
)都是同样好的匹配。因此,您的代码是不明确的(同样好的匹配,没有理由选择一个而不是另一个)我认为,如果您从未尝试默认构造一个构造函数,那么拥有多个默认构造函数是合法的object@M.M可能吧。这使得我的答案的开头在技术上是错误的,但我认为非语言律师更容易理解。