zoukankan      html  css  js  c++  java
  • 当函数返回值是引用

    同其他引用类型一样,如果函数返回引用,则该引用仅是它所引对象的一个别名。举个例子来说明,假定某函数挑出两个string 形参中较短的那个并返回其引用:函数的返回类型决定函数调用是否是左值。

    const string &shorterString(const string &s1, const string &s2){
        return s1.size() <= s2.size() ? s1 : s2;
    }
    

    其中形参和返回类型都是 const string 的引用,不管是调用函数还是返回结果都不会真正拷贝 string对象。

    调用一个返回引用的函数得到左值,其他返回类型得到右值。

    可以像使用其他左值那样来使用返回引用的函数的调用,特别是,我们能为返回类型是非常量引用的函数的结果赋值∶

    char &get_val(string &str, string::size_type ix){
        return str[ix];
    }
    
    int main(){
        string s("a value");
        cout << s << endl;
        get_val(s, 0) = 'A';
        cout << a << endl;
        return 0;
    }
    

    把函数调用放在赋值语句的左侧可能看起来有点奇怪,但其实这没什么特别的。

    返回值是引用,因此调用是个左值,和其他左值一样它也能出现在赋值运算符的左侧。

    如果返回类型是常量引用,我们不能给调用的结果赋值,这一点和我们熟悉的情况是一样的∶

    shorterString("hi", "bye") = "X";     // 错误:返回值是一个常量
    
  • 相关阅读:
    <%%>与<scriptrunat=server>,<%=%>与<%#%>的区别
    UVA 11134
    Codeforces Round #219 (Div. 1)(完全)
    Delphi版浏览器(持续更新)
    Spring3.0 入门进阶(三):基于XML方式的AOP使用
    UVa 10801 Lift Hopping / floyd
    poj 3501 Escape from Enemy Territory 二分+bfs
    vim 编辑器
    RRT路径规划算法(matlab实现)
    A*寻路算法C++简单实现
  • 原文地址:https://www.cnblogs.com/lihello/p/14300251.html
Copyright © 2011-2022 走看看