2017-05-29 13 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 
関連する問題