右辺値への非 const 参照のバインドを許可する: VS2010 の異常
C 標準では、右辺値への非 const 参照のバインドを厳しく禁止しています。ただし、奇妙な異常により、Visual Studio 2010 (SP1) は次のコードをエラーや警告なしでコンパイルします。 } int main() { 文字列& tem = foo(); // 右辺値への非定数参照 }
string foo() { return "hello"; }
int main() {
string& tem = foo(); // Non-const reference to rvalue
}
対照的に、他のコンパイラはより厳格な動作を示します:
GCC はコンパイル エラーを発行し、不正なコンパイラを正しく識別します非 const 参照を右辺値にバインドします。
VS2010 でのこの異常な動作は、既知のコンパイラ拡張機能に起因します。 GCC や Visual Studio 2008 とは異なり、VS2010 では、一時オブジェクトを返す関数によって右辺値が生成される場合など、特定の場合に非 const 参照を右辺値にバインドできます。
この拡張機能は標準に反していますが、おそらく便宜上実装されたものと思われます。ただし、参照がバインドされた後に右辺値が変更されると、未定義の動作が発生する可能性があります。結果と推奨事項
この拡張機能は、依存するコードに微妙なバグを引き起こす可能性があります。 C 標準への適切な準拠が求められます。したがって、VS2010 であっても、非 const 参照を右辺値にバインドしないことを強くお勧めします。代わりに、標準で意図されているように、右辺値にバインドするときは常に const 参照を使用してください。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3