默认构造函数c ++

Cub*_*red 2 c++ constructor default-constructor most-vexing-parse

我试图理解默认构造函数(由编译器提供,如果你不写一个)与你自己的默认构造函数的工作原理.

所以我举了这个简单的类:

class A
{
    private:
        int x;
    public:
        A() { std::cout << "Default constructor called for A\n"; }
        A(int x)
        {
            std::cout << "Argument constructor called for A\n";
            this->x = x;
        }
};

int main (int argc, char const *argv[])
{
    A m;
    A p(0);
    A n();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

为A调用的默认构造函数

参数构造函数调用A

所以对于最后一个,有一个被调用的另一个构造函数,我的问题是在这种情况下哪个类型和哪个类型具有?

Ren*_*ger 5

 A n();
Run Code Online (Sandbox Code Playgroud)

声明一个名为的函数,n它不带参数并返回一个A.

由于它是一个声明,因此不会调用/执行任何代码(尤其是没有构造函数).

在声明之后,你可能会写一些类似的东西

A myA = n();
Run Code Online (Sandbox Code Playgroud)

这会编译.但它不会链接!因为没有函数的定义n.