3

C ++で参照変数の説明を探していたところ、次のことがわかりました。

#include<iostream>
int a=10;   //global 'a' so that fun doesn't return a reference of its local variable
int & fun();
int main()
{
    int p = fun(); //line to be noted
    std::cout << p;
    return 0;
}

int & fun()
{
    return a;
}

これはうまくいきました。

#include<iostream>
int a=10;   //global 'a' so that fun doesn't return a reference of its local variable
int & fun();
int main()
{
    int &p = fun(); //line to be noted
    std::cout << p;
    return 0;
}

int & fun()
{
    return a;
}

私の質問は、最初のコード スニペット [行番号 6] で行われているように、整数変数に参照の値を格納する方法です。コード スニペット 2 [6 行目] に示されている正しい構文ではありませんか。つまり、通常の整数変数ではなく、参照を運ぶために参照変数(int &p)を定義する必要があります。コンパイラはエラーまたは少なくとも警告を出すべきではありませんか? GCC 4.7.1 64 ビットを使用しています。

4

2 に答える 2

2

わかりました... @chris:あなたは正しかった..私がこれをしたとき:

int p = fun();
p++;
std::cout << p << endl << a;

結果は 11 と 10 でした。したがって、a の値のみが p にコピーされ、p は a のエイリアスにはなりません。しかし、2 番目のコードで同じことを試したところ、a と p の両方の値が 11 であることが示されました。したがって、p は a のエイリアスになりました。

于 2013-08-17T08:33:34.617 に答える
0

いいえ、どちらでも構いません。

たとえば、その目的で算術演算子のオーバーロードを使用する場合のように、戻り値を「その場で」または「a」を後で変更しようとしないため、この特別なケースでは戻り値の参照は必要ありません。

于 2013-08-17T08:15:31.157 に答える