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



我有 2 个测试类:

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

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

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

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

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

所以,我想编译器不能在 B 构造函数调用中将"i"解释为 int,但为什么呢?

这个:

A test(B(i));

与以下各项相同:

A test(B i);

这是一个函数声明,而不是由于最令人烦恼的解析而对构造函数的调用。有一条规则规定(S. Meyers,"有效的现代C++"(:

任何可以解析为声明的内容都必须解释为 一

为了避免这种情况,请使用大括号初始化(而不是括号()(,因为函数不能用大括号声明{}

A test{B(i)};

话虽如此,您的示例中没有"嵌套构造函数调用"。

最新更新