非常量引用綁定到右值:VS2010 異常
在C 中,通常考慮將非常量引用綁定到右值一個錯誤。但是,在Visual Studio 2010 中,以下程式碼編譯時不會出現任何錯誤或警告:
<code class="cpp">string foo() { return "hello"; } int main() { //below should be illegal for binding a non-const (lvalue) reference to a rvalue string& tem = foo(); //below should be the correct one as only const reference can be bind to rvalue(most important const) const string& constTem = foo(); }</code>
此行為與GCC 和VS2008 等其他編譯器不一致,後者會對此類程式碼引發編譯錯誤或警告。這種差異引發了關於它是否是 VS2010 中的錯誤的疑問。
解釋
在這種情況下 VS2010 的行為歸因於 VS 編譯器中的已知擴展。從歷史上看,這些編譯器允許將非常量引用綁定到右值,而無需明確 const 限定。引入此行為是為了方便程式設計師,並不被視為標準 C 功能。
在範例程式碼中,VS2010 中缺少任何錯誤或警告可以解釋如下:
結論
VS2010 允許的行為綁定到右值且沒有錯誤或警告的非常量引用不是標準C,而是被視為擴展。雖然它在某些情況下可能很有用,但它也可能導致意外行為,並且通常不鼓勵使用 const 引用來綁定到右值。
以上是為什麼VS2010允許非常量引用綁定到右值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!