私はC++を学んでいます。私は参考文献を読んで、いくつかの練習をしました(シンプル)。しかし、このコードには理解の問題があります。C++言語のリファレンス
const int& GetMax (const int& valuel, const int& value2)
です。
誰も私が関数型の参照を渡している理由とそれが(引数の型の中で)何をするのか理解できますか?この場合、何を参照するのですか?
私はC++を学んでいます。私は参考文献を読んで、いくつかの練習をしました(シンプル)。しかし、このコードには理解の問題があります。C++言語のリファレンス
const int& GetMax (const int& valuel, const int& value2)
です。
誰も私が関数型の参照を渡している理由とそれが(引数の型の中で)何をするのか理解できますか?この場合、何を参照するのですか?
C++での参照は、正確にはです。これは、他の変数を参照する変数名です。
文の観点で考える:
int xyzzy = 1;
int &plugh = xyzzy;
int twisty = xyzzy;
実際の「オブジェクト」ここxyzzy
のためには、値1
を含むものです。あなたはその名前をxyzzy
と呼んでいますが、それは本当にその名前です。それらは、(への参照)の両方の名前であるので、また同じことをxyzzy
の値を変化させるplugh
の値を変更する -
plugh
はに別の参照全く同じ基礎となるオブジェクトです。
twisty
変数は、他方では、それに横切ってxyzzy
の新しいオブジェクトと単にコピーした値として生成されます。それは(文字列のような)/コピーを構築することは比較的高価だオブジェクトへの参照を渡すために、より効率的なので、コードに
void fn(const string &str1) { ... }
:
あなたは、多くの場合のようなものが表示されます。オブジェクトへの参照を渡すと、現在存在するオブジェクトに直接アクセスできるようになり、const
は関数の変更を防ぎます。
int
のような基本的なタイプでこれを行うのは非常に珍しいことです。複製するコストは非常に小さく、通常は参照を渡すコストとほぼ同じです。
あなたはは時折のようなものが表示されます:
void fn(int &thing) { ... }
それはthing
は、関数内で変更されることが予想され、その変更が呼び出し元にミラーリングされますので、通常です。
。次のコードが示すように、私の最高の推測では、実装の並べ替えは、それがなければなりません。それに
const int& GetMax(const int& value1, const int& value2) {
if (value1 >= value2)
return value1;
return value2;
}
、コードを:
int val1 = 7;
int val2 = 42;
const int &biggest = GetMax (val1, val2);
が実際にbiggest
が参照するの参照を設定しますval1
とval2
のうち最大のものです。言い換えれば、擬似コードと機能的に同等です。
val1 = 7
val2 = 42
if (val1 > val2)
biggest = reference to val1
else
biggest = reference to val2
thnx私はそれを得ましたが、私たちが* ** int&***? –
しかし、 'const int&'をパラメータに渡すことに利点はありますか?それは 'int'であるので、データの対処に関して何ら利点をもたらさず、' const'なので変更できません。だから、 'int'の代わりに' const int& 'を渡す点は何ですか? – taskinoor
@taskinoor:質問の新しい情報に基づいて回答を更新しました。 *参照*を変数に戻したいので、その存続期間が関数を超えているものを使用する必要があります。言い換えれば、値渡しのパラメータと地方は、方程式の外にあります。 – paxdiablo
intを参照渡ししないと、関数内部からは変更できません。 intのコピーは代わりに変更されます。
https://en.wikipedia.org/wiki/Reference_(C%2B%2B) –
thnx、非常に役立ちます。 –
Stack Overflowに関する[C++での参照変数とは何ですか?](https://stackoverflow.com/q/2765999/608639)を参照してください。 – jww