4

メソッドが実際に値で返すように宣言されているのに、参照によってメソッドから何かを返す場合、それが有効な c++ であるかどうか疑問に思っていました。

class A {
public:
    int method(){
        int i = 123;
        int& iref = i;
        return iref;
    }
};

これは正常にコンパイルされ、動作するようです。私が理解していることから、メソッドの署名で宣言されているように、これは値で返されるはずです。ローカル変数への参照を返すことになりたくありません。これがトラップのない「適切な C++ コード」であるかどうかは誰にもわかりませんか?

4

2 に答える 2

6

これは完全に有効な C++ コードであり、期待どおりの動作をします。

  • ローカル変数を持つ
  • そのローカル変数へのローカル参照を持っている
  • ローカル参照によって参照される変数のコピーを作成します
  • そのコピーを呼び出し元に返します (スタックをアンワインドし、ローカル変数とその参照の両方を破棄します)

心配しないでください。この方法でローカル変数への参照を返すことはありません。

于 2012-08-04T18:21:33.810 に答える
4

コードは問題ありません。値が の値で int を返しますi

于 2012-08-04T18:18:13.717 に答える