通常情况下,返回一个引用可以避免返回值被复制,并且(如果它不是const
限定的)可以让您有机会更改“原始”值。返回类型const T&
经常与类类型的对象一起使用,例如, std::vector
,其中复制可能导致(不需要的)开销。与int
等基本数据类型结合使用时,传回const int&
可能会比复制原始int值花费更多。另外,在你的例子中,如果你将const int&
类型的结果赋值给一个非引用类型,例如, int largest = max(...)
,返回值是“取消引用”并按值赋值。因此,您可以更改变量的内容,因为它是const
引用值的副本。如果你有一个类型const int&
,并且你将它分配给一个类型为const int&
的变量,那么你得到一个引用,但编译器不会允许你改变它的内容。
因此,传回int
的引用的唯一方法是没有const
,这将允许您更改“origninal”值的内容。 请参阅以下代码;希望它有助于一点:
int& max(int a[], int length) {
return a[3];
}
const int& maxConst(int a[], int length) {
return a[3];
}
int main(){
int array[] = {12, -54, 0, 123, 63};
int largest = max(array,5);
cout<< "Largest element (value) is " << largest << endl;
largest = 10;
cout << "Element at pos 3 is: " << array[3] << endl;
int largestConst = maxConst(array,5);
cout<< "Largest element (value) is " << largestConst << endl;
largestConst = 10;
cout << "Element at pos 3 is: " << array[3] << endl;
int &largestRef = max(array,5);
cout<< "Largest element (ref) is " << largestRef << endl;
largestRef = 10;
cout << "Element at pos 3 is: " << array[3] << endl;
const int &largestRefConst = maxConst(array,5);
cout<< "Largest element (value) is " << largestRefConst << endl;
// largestRefConst = 10; // -> cannot assign to variable with const-qualified type
//cout << "Element at pos 3 is: " << array[3] << endl;
return 0;
}
输出:
Largest element (value) is 123
Element at pos 3 is: 123
Largest element (value) is 123
Element at pos 3 is: 123
Largest element (ref) is 123
Element at pos 3 is: 10
Largest element (value) is 10
你写的代码 - 你有什么期待它做什么? –
这是我讲义中的代码,它肯定会返回数组中最大的数字,但我从来没有见过像这样的用法。正如我上面问,为什么我使用“&”和为什么ım返回值? –
如果这确实是你课程的代码,并且如果该课程没有解释'&'的各种含义,那么我建议你需要选择不同的课程。 –