返回类类型的函数和调用运算符
函数调用也是一个运算符,同样存在优先级和结合律。
调用运算符与点运算符和箭头运算符同优先级,满足左结合律。
因此在函数返回类类型的对象时,我们可以直接对对象进行访问。
在下面的代码中直接对返回值进行了size() 函数的调用。
// 调用string对象的size成员,该string对象是由shorterString函数返回的 auto sz = shorterString(s1, s2).size();
这种函数的设计方式在java中比较常见,需要小心的一点是,多次的连续调用写法如果产生错误将加大排错难度。
引用返回左值
左值是可以写在等式左侧的。
所以我们可以有如下的写法:
#include <iostream> #include <string> using std::cout; using std::endl; using std::string; char & get_val(string &str, string::size_type ix) { return str[ix]; // get_val假定索引值是有效的 } int main() { string s("a value"); cout << s << endl; get_val(s, 0) = 'A'; cout << s << endl; }
我们看到运行结果中两个字符串的首字母一个大写一个小写。
在代码中我们可以看到是对函数的返回值进行了左值的赋值操作而得到了这个结果。
所以引用返回的是一个左值,可以进行赋值操作
当然这里指的是非const的引用