C ++:使用rvalue引用重载'normal'函数 - 它有意义吗?

时间:2014-12-22 17:16:56

标签: c++ overloading rvalue-reference

我最近读了很多关于右值引用和移动语义的内容。从我所见过的所有内容中,主要的应用是移动构造函数和移动赋值运算符。所以我问自己,如果你有一个已经有移动构造函数和移动赋值运算符的类型,那么用rvalues重载'normal'函数或者使用的类型的移动构造函数/赋值运算符是否足够是明智的

例如,如果我们考虑这段代码:

Image threshold(Image&& img){
    //will be called for rvalues
    //do something here that alters the image
    return img;
}

Image threshold(Image img){
    //this will be called for lvalues.
    //now we have a local copy of img so we can forward it as rvalue to the other one
    img = threshold(std::move(img));
    return img;
}

现在,我们以这种方式使用它:

int main(){
    Image img("filename.png");
    Image img2;
    //here the lvalue function will be called
    img2 = threshold(img);

    //here the rvalue function should be called
    Image img3 = threshold(functionThatReturnsImage());
}

这种重载函数的方式是否有意义?或者它是多余的,因为类型Image的移动构造函数和asignment运算符足以使值返回更有效(通过移动而不是复制返回)?

感谢您的帮助!

0 个答案:

没有答案