引用类型函数操作

引用可作用于函数参数和函数返回值

引用类型函数参数

参考:Reference-Type Function Arguments

将引用作为函数参数,通过传递对象地址的方式进行对象访问,避免对象复制带来的额外开销,通常比直接输入对象更有效

语法

分两种情况,一是函数能够修改对象信息,而是函数能够访问对象信息

// 可修改
ret-type func(type& declarator);
// 可访问
ret-type func(const type& declarator);

引用类型函数返回值

参考:Reference-Type Function Returns

正如通过引用将大对象传递给函数更有效一样,通过引用从函数返回大对象也更有效。引用返回协议消除了在返回之前将对象复制到临时位置的必要性

将引用作为函数返回值有以下要求:

  1. 函数返回类型一定是lvalue
  2. 当函数返回时,引用的对象不能超出其作用域范围

示例

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函数,所以函数返回时没有超出其作用域