2017-05-29 32 views
-5
const int& max(int a[], int length) 
{ 

int i=0; 

    for(int j=0; j<length; j++) 
     if(a[j]>a[i]) i=j; 
    return a[i]; 
} 

int main(){ 

    int array[] = {12, -54, 0, 123, 63}; 
    int largest; 
    largest = max(array,5); 
    cout<< "Largest element is " << largest << endl; 
    return 0; 
} 

所以我的问题是,什么是“const int &”作为返回类型?为什么我在函数期望引用时返回值?“const int&”做什么作为返回类型?

+3

你写的代码 - 你有什么期待它做什么? –

+0

这是我讲义中的代码,它肯定会返回数组中最大的数字,但我从来没有见过像这样的用法。正如我上面问,为什么我使用“&”和为什么ım返回值? –

+0

如果这确实是你课程的代码,并且如果该课程没有解释'&'的各种含义,那么我建议你需要选择不同的课程。 –

回答

1

通常情况下,返回一个引用可以避免返回值被复制,并且(如果它不是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 
相关问题