如何调用 class 的默认构造函数,其构造函数由具有所有默认参数的 ctor 提供?

How to invoke a class's default constructor whose one is provided by a ctor with all default paramters?

在C++ primer 5Th版中说,为所有参数提供默认参数的构造函数也定义了默认构造函数:

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() 而不是 Point(int, int) 但我得到的是后者而不是默认构造函数?!

那么是否可以调用一个为所有参数提供默认实参的构造函数提供的class的默认构造函数?谢谢。

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

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

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

So is it possible to invoke the default constructor of a class provided by a constructor that provides default arguments for all the parameters?

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

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

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