通过const值返回的目的?

这个问题在这里已经有了答案:

  • 通过const值为非内建类型返回函数的用例是什么? 4个答案

  • 在假设情况下,您可以对对象执行潜在的非常昂贵的非常量操作,通过const-value返回可以防止您意外地在临时调用此操作。 想象一下, +返回一个非const值,你可以写:

    (a + b).expensive();
    

    然而,在C ++ 11时代,强烈建议将值作为非常量返回,以便充分利用右值引用,这只对非常量右值有意义。

    总之,这种做法有一个基本原理,但实质上已经过时。


    这是很没有意义的返回一个const从一个函数值。

    很难让它对你的代码有任何影响:

    const int foo() {
       return 3;
    }
    
    int main() {
       int x = foo();  // copies happily
       x = 4;
    }
    

    和:

    const int foo() {
       return 3;
    }
    
    int main() {
       foo() = 4;  // not valid anyway for built-in types
    }
    
    // error: lvalue required as left operand of assignment
    

    虽然您可以注意到返回类型是否是用户定义的类型:

    struct T {};
    
    const T foo() {
       return T();
    }
    
    int main() {
       foo() = T();
    }
    
    // error: passing ‘const T’ as ‘this’ argument of ‘T& T::operator=(const T&)’ discards qualifiers
    

    这是否对任何人都有好处是值得怀疑的。

    返回一个引用是不同的,但除非Object是一些模板参数,否则你没有这样做。


    它确保返回的对象(在该点是一个RValue)不能被修改。 这可以确保用户不会这样想:

    myFunc() = Object(...);
    

    如果myFunc通过引用返回,那么这将很好地工作,但几乎肯定是由值返回的错误(并且可能不会被编译器捕获)。 当然,在C ++ 11中,这个约定并没有像之前那么有意义,因为const对象不能被移出,所以这会对性能产生相当大的影响。

    链接地址: http://www.djcxy.com/p/73145.html

    上一篇: Purpose of returning by const value?

    下一篇: Post increment in operator overloading in c++