链式转换构造函数

时间:2019-12-14 18:42:47

标签: c++ c++11 c++17

class A{
public:
    A(int i){}
};
class B{
public:
    B(A){}
};
void test(B){};
int main() {
    A a=1;
    B b1=a;
    test(1);
}

我有两个类,其中第一类具有转换int Ctor,这意味着我可以通过“分配”一个整数(第一行)来构造它。

第二个类具有参数类型为A的转换Ctor。可以用(第二行)构造b1。

是否有可能在链中使用多个转换ctor,从而可以编译第三行?

1 个答案:

答案 0 :(得分:1)

您可以显式B构造int,但不能隐式

test(B{1});  // ok
test(1);     // Not ok

话虽这么说,但这种中途措施也有效:

test({1});  // ok

以上所有内容仅适用于一个隐式生成的中产阶级(A)。这样的链条无法进一步扩展。