〈🎜>在以下程式碼片段中,Visual Studio 2010 (SP1) 編譯器成功編譯,沒有任何錯誤或警告,即使它看起來是對臨時右值的非常量引用的無效初始化:
預期行為:
根據C 標準,將非常量引用綁定到右值應被視為錯誤或警告。這是因為非常量引用只能綁定到左值(具有永久位址的物件)。VS2010 行為:
但是,Visual Studio 2010 編譯器歷史上有允許這種做法作為語言的擴展。此行為不符合 C 標準,通常被認為是一個錯誤。<code class="cpp">string foo() { return "hello"; } int main() { string& tem = foo(); // Should be illegal }</code>
原因:
此行為的原因尚不完全清楚,但它是這被認為與Visual Studio 編譯器在錯誤檢查和警告方面始終更加寬鬆這一事實有關。這種寬鬆性可能是故意引入的,以便在編寫程式碼時提供更大的靈活性,儘管它不遵循 C 標準。
意義:
此行為可能會產生影響為了程式碼安全和效能。將非常量引用綁定到右值可能會導致意外結果,因為右值可能隨時被修改或銷毀。
解:
建議的解法是為了避免將非常量引用綁定到右邊值。相反,請使用 const 引用(可以綁定到左值和右值)或指標。
以上是為什麼 Visual Studio 2010 允許將非常量參考綁定到右值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!