c ++嵌套构造函数调用问题

时间:2017-11-11 17:23:19

标签: c++

我有2个测试类:

class B {
    public:
    B(int i) {
       qDebug() << "B constructor ";
    } 
};

class A {
    public:
    A(B b) {
        qDebug() << "A constructor ";
    } 
};

现在我想用B创建一个对象,这就是我所做的:

int i = 5;
A test (B(i)); //does not work

代码编译没有错误,但第二行根本不执行。我做了一些测试,下面的代码效果很好:

int i = 5;
A test (B((int)i)); //works

A test (B(5)); //works

所以,我猜编译器无法解释&#39;我&#39;作为B构造函数调用中的int,但为什么?

1 个答案:

答案 0 :(得分:0)

此:

A test(B(i));

与:

相同
A test(B i);

这是一个函数声明,而不是由于most vexing parse而对构造函数的调用。 有一条规则(S. Meyers,&#34; Effective Modern C ++&#34;):

  

任何可以解析为声明的东西都必须解释为   一个

为了避免使用支撑初始化(而不是括号()),因为函数不能用{}括号声明:

A test{B(i)};

据说没有&#34;嵌套的构造函数调用&#34;在你的例子中。