一般的に、参照を返すと戻り値がコピーされることが回避され、(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が値を返すのか? –
これは本当にあなたのコースのコードであり、そのコースが '&'の様々な意味を説明していない場合は、別のコースに参加する必要があることをお勧めします。 –