默认构造函数c
作者:互联网
我试图理解默认构造函数(由编译器提供,如果你不写一个)与你自己的默认构造函数的工作原理.
所以我举了这个简单的类:
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;
}
输出是:
为A调用的默认构造函数
参数构造函数调用A
所以对于最后一个,有一个被调用的另一个构造函数,我的问题是在这种情况下哪个类型和哪个类型具有?
解决方法:
A n();
声明一个名为n的函数,它不带参数并返回A.
由于它是一个声明,因此不会调用/执行任何代码(尤其是没有构造函数).
在声明之后,你可能会写一些类似的东西
A myA = n();
这会编译.但它不会链接!因为没有函数n的定义.
标签:most-vexing-parse,c,constructor,default-constructor 来源: https://codeday.me/bug/20191007/1863800.html