我在C ++中面临一系列用户定义转换的问题。 请考虑以下代码:
struct A
{
A(int);
};
struct B
{
B(A);
};
struct C
{
C(B);
};
构造函数在某处定义。 现在,以下语句可以正常工作:
A(1); // A <- int
B(1); // B <- A <- int
C(A(1)); // C <- B <- A <- int
C(B(1)); // C <- B <- A <- int
C(B(A(1))); // C <- B <- A <- int
但是,当我尝试编译以下内容时:
C(1); // C <- B <- A <- int
我收到以下错误:
error: no matching function for call to ‘C::C(int)’
no known conversion for argument 1 from ‘int’ to ‘B’
我知道这样的构造在C ++中是非法的。 不过,我的问题是:
C(B(A(1)))
的结构有点烦人。为了完整起见,我发现了几个相关问题(例如Why user-defined conversions are limited?)。但是,没有人提出我的问题。
答案 0 :(得分:0)
正如你所说,你的第一个问题已经得到解答。
至于解决方法,假设你不想在你的C类中添加A构造函数,你可以只使用一个允许的隐式转换:
C(B(1));
以下内容也适用:
C(A(1));