[英]Difference between constructors with parameters and without
这是两节课
class A
{
std::string s;
public:
A() { prn("A constructor"); }
A(std::string s) : s(s) { prn("A not empty constructor"); }
A(const A&) { prn("A copy constructor"); }
A& operator =(const A& a) { prn("A = operator"); return *this; }
void p() { prn("in A"); }
};
class B
{
public:
A a;
B(A aa) : a(aa) { prn("B constructor"); }
B() { prn("B default constructor"); }
};
现在下面的代码可以正常工作
B b(A("sa"));
b.a.p();
打印:
非空构造函数
复制构造函数
B构造函数
在一个
但是,如果我使用没有参数的构造函数,则会发生奇怪的情况
B b(A());
编译并运行,但没有输出(未调用任何构造函数)
B b(A());
b.a.p(); // error here
出现编译错误。 那么这两个构造函数有什么区别?
B b(A());
这没有声明对象。 它声明一个名为b
的函数,返回类型为B
,该函数将一个指向返回类型A
的函数的指针作为参数。
您想要的是:
B b = A();
或(感谢Kerrek):
B b((A()));
或在C ++ 11中:
B b {A()};
这有时被称为烦人的解析 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.