は何この引数はこの関数に渡して、このコードはC++プライマーにfine.according作品C++機能:
int func(const int &i)
{
/* */
}
int main()
{
int j = 1;
func(j); // pass non const argument to const reference
j=2; // reassign j
}
、私はconst参照引数のパスを受け入れる機能を持っていると仮定const参照パラメータに非constの引数を渡しますで、次のように、私は、jの同義語(エイリアス)である
int j=1;
const int &i = j;
、
私の質問です:私は、jの同義語であり、私はconstのように定義されている場合、I Sコード:
のconst int型は& I = J
は、変数をconstのために非constの変数をredelcare?なぜこの式がC++で合法であるのですか?
あなたは参照がオブジェクト自体ではないことを意味します。どのように私はjの同義語を理解するのですか? iとjの両方が同じ物理アドレスを持つので、iとjが同じオブジェクトであることを意味しますか? – fuyi
iはオブジェクトjの代替参照です。だから同義語。あなたは、それが参照しているオブジェクトを変更するために '私'を使用することはできないと言ってきました。私が言及しているオブジェクトを変更する他の方法を使用することはできません。 あなたは、その宣言を使ってiを拡張しようとしているのではなく、その機能を制限しています。 –
@ xiaopang:「i」と「j」は名前です。それらは両方とも同じオブジェクトを参照します。しばしば、何かがその名前であること、またはその名前がオブジェクトであると言うことです。たとえば、私は「私はスティーブです」と言うかもしれません。しかし、これは不正確な用語であり、2つは同じではありません。また、「スティーヴは首都Sで始まる」と言うこともできます。それは* I *が資本 'S'で始まることを意味するものではありません。 「スティーブ」の周りの引用符は、それが指しているオブジェクトではなく名前について話していることを示すためにそこにあります。 'i'と' j'は同じオブジェクトの両方の名前であるため同義語ですが、名前としてのプロパティは異なります。 –