首頁  >  文章  >  後端開發  >  為什麼VS2010允許非常量引用綁定到右值?

為什麼VS2010允許非常量引用綁定到右值?

DDD
DDD原創
2024-10-28 03:22:31549瀏覽

Why Does VS2010 Allow Non-Const References to be Bound to Rvalues?

非常量引用綁定到右值: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 中缺少任何錯誤或警告可以解釋如下:

  • 編譯器將 foo() 的回傳值辨識為右邊值。
  • 它將 string& tem 宣告解釋為對字串的非常量引用。
  • 但是,由於VS 編譯器中的擴展,它允許引用綁定到 foo() 返回的右值。

結論

VS2010 允許的行為綁定到右值且沒有錯誤或警告的非常量引用不是標準C,而是被視為擴展。雖然它在某些情況下可能很有用,但它也可能導致意外行為,並且通常不鼓勵使用 const 引用來綁定到右值。

以上是為什麼VS2010允許非常量引用綁定到右值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn