一時オブジェクトを参照として渡す矛盾
C では、一時オブジェクトは const、値、またはとして宣言された参照にのみ渡すことができます。右辺値参照。この制限により、ランタイム エラーにつながることが多い一時ファイルの不注意な変更が防止されます。
コンパイラ エラー
次のコードを検討してください:
class Foo { public: Foo(int x) {}; }; void ProcessFoo(Foo& foo) { } int main() { ProcessFoo(Foo(42)); return 0; }
Linux の場合および Mac では、このコードは次のようにコンパイルできません。エラー:
error: invalid initialization of non-const reference of type ‘Foo&’ from an rvalue of type ‘Foo’
このエラーは、一時的な Foo オブジェクトを非 const 参照パラメータに渡そうとしたことが原因で発生します。これは C で禁止されています。
回避策
この問題を解決するには、次の方法を使用できます。回避策:
Foo foo42(42); ProcessFoo(foo42);
ここでは、一時的な foo42 変数が作成され、参照によって渡されます。
void ProcessFoo(const Foo& foo)
これにより、const 修飾子により一時オブジェクトを渡すことができます。
void ProcessFoo(Foo foo)
値を渡すと、一時ファイルが
Visual Studio と g
この場合、Visual Studio の動作は g とは異なります。 MSVC では一時変数を非定数参照に渡すことが許可されており、実行時に微妙な問題が発生する可能性があります。この動作は、C 標準に厳密に準拠し、そのような行為を禁止する g とは対照的です。
以上がC で一時オブジェクトを非 Const 参照に渡せないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。