代码之家  ›  专栏  ›  技术社区  ›  Thomas

传递引用时隐式强制转换不起作用

c++
  •  1
  • Thomas  · 技术社区  · 11 年前
    union A {
        public:
        B b;
        inline operator B() const {
            return b;
        }
    }
    void doSomething(B& b){};
    A a;
    doSomething(a);
    

    使用与上面类似的代码获取“调用无匹配函数”错误。你能不这样含蓄地引用吗?

    四处工作?

    2 回复  |  直到 11 年前
        1
  •  3
  •   Emil Laine    11 年前

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

    由于rvalues只能用作非常量引用或值参数,因此不能调用 doSomething 具有右值。

    要么声明 做某事 通过常量引用、值引用或右值引用获取其参数。你也可以 operator B 返回对 b 成员,如果合适的话。

        2
  •  1
  •   Some programmer dude    11 年前

    强制转换运算符返回 b 按价值计算 ,并在调用 doSomething 函数将创建 短暂的 值,因为临时值的临时性,所以不能引用临时值。

    任一更改 做某事 通过值或 const 引用(可以绑定到临时值),或者可能是右值引用(使用 && 参数声明中的语法),或者当然生成返回引用的强制转换运算符。