繁体   English   中英

带参数和不带参数的构造函数之间的区别

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM