通过引用传递时隐式转换不起作用

时间:2015-03-23 22:31:33

标签: c++

union A {
    public:
    B b;
    inline operator B() const {
        return b;
    }
}
void doSomething(B& b){};
A a;
doSomething(a);

使用类似于上面的代码获取“没有匹配的函数来调用”错误。你不能用这种方式来引用吗?

解决?

2 个答案:

答案 0 :(得分:2)

在调用doSomething(a)中,a使用转换运算符(按值返回,因此返回新的临时对象)转换为B类型的右值。

由于rvalues只能用作非const引用或值参数,因此您无法使用rvalue调用doSomething

声明doSomething通过const引用,值或rvalue-reference获取其参数。如果合适,您还可以operator B返回对b成员的引用。

答案 1 :(得分:1)

强制转换操作符按值返回b ,并且在调用doSomething函数时使用该结果将创建临时值,并且由于它们的临时性,你根本无法引用临时值。

更改doSomething以按值接收其参数,或者通过 const 引用(可以绑定到临时值),或者可能是rvalue-reference(使用参数声明中的&&语法),或者当然是一个返回引用的强制转换操作符。