「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ で非 Const 左辺値参照を右辺値にバインドできないのはなぜですか?

C++ で非 Const 左辺値参照を右辺値にバインドできないのはなぜですか?

2024 年 12 月 22 日に公開
ブラウズ:299

 Why Can\'t I Bind a Non-Const Lvalue Reference to an Rvalue in C  ?

非 Const 左辺値参照を右辺値にバインドできません: 解決策

クラス Foo のオブジェクトの初期化中に、指定されたコード スニペットでエラーが発生しましたBar クラスのコンストラクター内。エラー メッセージは、非 const 左辺値参照 (Foo f) が右辺値 (genValue() 呼び出しの結果) にバインドされていることを示しています。

C では、非 const 参照パラメーターは名前付き参照のみを参照できます。変数 (左辺値)。ただし、genValue() の結果は一時的な値 (rvalue) です。この問題を解決するには、genValue() の値を value (int) で渡す必要があります。

class Foo {
public:
    Foo(int x) {
        this->x = x;
    }
private:
    int x;
};

class Bar {
public:
    Bar(): f(genValue()) {
    }
private:
    Foo f;

    int genValue() {
        int x;
        // do something ...
        x = 1;
        return x;
    }
};

コンストラクター引数を int に変更することで、コンストラクター スコープ内でエラーなく Foo オブジェクトを初期化できるようになりました。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3