【发布时间】:2012-01-13 04:12:19
【问题描述】:
这里有两个类
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 构造函数
在A
但是如果我使用没有参数的构造函数会发生一些奇怪的事情
B b(A());
编译并运行但没有输出(没有调用构造函数)
B b(A());
b.a.p(); // error here
出现编译错误。那么这两个构造函数有什么区别呢?
【问题讨论】:
-
你没有调用任何构造函数,尽管你可能认为你已经调用了。
-
我认为你应该像 A a;B b(a);正如预期的那样工作正常。你提到的是函数 decl 而不是对象 decl。
标签: c++ constructor