次のコードのように、一時オブジェクトを非 const 参照として渡そうとする場合:
void ProcessFoo(Foo& foo) { } int main() { ProcessFoo(Foo(42)); // Error: Can't pass temporary object as reference }
g や Clang などのコンパイラはエラーを発生させます。これは、設計上、C では一時変数を const 参照、値パラメータ、または右辺値参照に渡すことが制限されているために発生します。
この制限の背後にある理論的根拠は、非 const 参照パラメータを受け取る関数がそれらのパラメータを変更して返すことを意図しているということです。発信者に。このシナリオで一時変数を渡すことは無意味であると考えられ、エラーを示している可能性があります。
この問題を解決するには、いくつかの回避策が利用可能です。
1.一時変数の使用
一時変数を作成し、引数として関数に渡します:
Foo foo42(42); ProcessFoo(foo42);
2. const 参照パラメータを使用した関数の宣言
const 参照を受け入れるように関数宣言を変更します。
void ProcessFoo(const Foo& foo) { }
3.値による受け渡し
関数がオブジェクトを値で受け入れることを許可します:
void ProcessFoo(Foo foo) { }
Visual Studio では、コンパイラ実装の制限が緩和されているため、この元のコードが許可されます。
以上がC で一時オブジェクトを非 Const 参照として渡せないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。