引用类型函数操作¶
引用可作用于函数参数和函数返回值
引用类型函数参数¶
参考:Reference-Type Function Arguments
将引用作为函数参数,通过传递对象地址的方式进行对象访问,避免对象复制带来的额外开销,通常比直接输入对象更有效
语法¶
分两种情况,一是函数能够修改对象信息,而是函数能够访问对象信息
// 可修改
ret-type func(type& declarator);
// 可访问
ret-type func(const type& declarator);
引用类型函数返回值¶
参考:Reference-Type Function Returns
正如通过引用将大对象传递给函数更有效一样,通过引用从函数返回大对象也更有效。引用返回协议消除了在返回之前将对象复制到临时位置的必要性
将引用作为函数返回值有以下要求:
- 函数返回类型一定是
lvalue
- 当函数返回时,引用的对象不能超出其作用域范围
示例¶
struct S {
short i;
};
S &f(S &s) {
// S s;
s.i = 333;
cout << (void *) &s << endl;
return s;
}
int main() {
S a;
S &s = f(a);
cout << (void *) &s << endl;
}
在main
函数内将结构体对象a
输入函数f
,再返回其引用到main
函数,赋值给引用对象s
注意:此时对象a
的作用域是main
函数,所以函数返回时没有超出其作用域