10

C ++で参照を参照に渡すのは違法だと思いますが、このコードを実行してもエラーは発生しません。

void g(int& y)
{
   std::cout << y;
   y++;
 }

 void f(int& x)
{
  g(x);
}
int  main()
{
  int a = 34;
  f(a);
  return 0;

 }

g() の仮パラメータは参照への参照として適格ではありませんか??

4

5 に答える 5

5

の本体では、fの値はです。変数に型があるという事実は、式の値が左辺値であることを意味するため、関数のパラメーターにバインドできます。 xint xint &g

于 2013-08-27T19:07:39.183 に答える
5

いいえ、g()参照への参照を取っているわけではありません。への参照を取りますint。は、受信したf()への参照を に転送します。intg()

「参照への参照」は実際には存在しませんが、参照に似ていますが、一時的なものへのバインドを許可する右辺値参照があります。

于 2013-08-27T19:05:59.647 に答える
5

1) 参照を参照に渡すことに問題はありません (実際には右辺値参照と呼ばれますが、移動コンストラクターと移動代入演算子が使用するものです)。

2)あなたがしていることは、参照に参照を渡すことではなく、同じ参照をfに渡すことgです:

void g(int& x)
{
    x = 5;
}

void f(int& x)
{
    std::cout << "f-in " << x << std::endl;
    g(x);
    std::cout << "f-out " << x << std::endl;
}

int main()
{
    int x = 42;
    f(x);
    std::cout << "New x = " << x << std::endl;
}
于 2013-08-27T19:09:48.480 に答える
1

参照は、別のオブジェクトへのエイリアスです。参照が初期化されると、オブジェクトに直接アクセスしている場合とまったく同じように動作するため、参照への参照ではなく、実際のオブジェクトへの参照を渡します (別の参照によって参照されます)。

参照への参照を作成すると、次のようになります。

typedef int& intr;
void f(intr& x);    // reference to a reference type
于 2013-08-27T19:15:21.787 に答える
0

コードのどこにも参照への参照を渡そうとしません。内部fxは、型の左辺値を生成しintます。参考にはなりません。参照型の結果は言語によって非参照型の左辺値として即座に解釈されるため、C++ の式はアクセス可能な参照型の結果を生成しません。

5/5参照

式が最初に「T への参照」型 (8.3.2、8.5.3) を持っている場合、その型は、さらなる分析の前に T に調整されます。式は参照によって示されるオブジェクトまたは関数を指定し、式は式に応じて左辺値または x 値です。

PS 「g() の仮パラメーターが参照への参照として適格ではない」という意味がわかりません。の仮パラメータはgとして宣言されていint &ます。ここで「参照への参照」はどこに表示されますか?

于 2013-08-27T19:11:34.340 に答える