在C ++中返回引用的语法 - &符号

时间:2016-04-29 21:24:10

标签: c++ return-type

我们都熟悉通过引用返回:

//global 
int x;

int& getElX()
{
    return x;
}

因为该函数返回int &类型,为什么不必说return (int&)X

再次,我理解返回引用是如何工作的。这是一个主要是语法

的问题

此外,如果您执行return (int&)x,意义是否会改变?

3 个答案:

答案 0 :(得分:10)

int&可以绑定到int类型的左值。如果返回的表达式已经是类型int的左值,则不需要强制转换。如果返回的表达式是某些其他类型的,无法直接用于初始化int&,那么将需要强制转换。

(int&)v[x]的含义不会改变:因为强制转换的操作数已经是int类型的左值,所以强制转换没有效果。

答案 1 :(得分:4)

表达式 <p>{{average(items)}}</p> 相当于v[x],它调用函数v.operator[](x),现在vector<int>::reference vector<int>::operator[](size_t)vector<int>::reference的typedef。函数返回类型'lvalue-reference to int'的函数调用表达式是'int'类型的'左值表达式'。 statetment int&使用表达式return v[x]初始化函数的返回值,返回类型为'lvalue-reference to int',左值引用只能使用兼容的左值表达式初始化类型,v[x]是。现在,表达式v[x](int&)v[x]转换为它已经存在的'int value'类型的左值,因此它什么都不做。

注意:v[x]返回的引用实体的生命周期最多是调用它的向量的生命周期,(在编辑之前)这是参数vector<int>::operator[](size)的生命周期。从执行函数开始直到它结束,这是在执行v语句时发生的。因此,函数返回的引用实体已经过期,这意味着访问它是未定义的(即不要这样做)。

答案 2 :(得分:-1)

出于同样的原因,你不必写:

int x = 2;
int& ref = (int&)x;