我有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,但为什么?
答案 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;在你的例子中。