这里有两类区别与参数的不
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
了编译错误。那么这两个构造函数有什么区别呢?
即使您可能认为自己做过,但您并未调用任何构造函数。 – 2012-01-12 20:00:36
我认为你应该像A a; B b(a);如预期般运作良好。你提到的是函数decl不是对象decl。 – chinnagaja 2012-01-12 20:11:46