相關文章:
根據該問題的幾位答主的回答,整理成個人的理解。
從設計初衷上講
允許引用綁定非左值的初衷在於“讓傳值還是傳引用成爲函數本身的細節,調用者不用去關心”,這一點,在const引用上可以達到,而非const引用,調用者無法不關心傳值還是傳引用,所以乾脆在C++ 2.0禁止掉了。
如下示例,如果允許非常量左值引用綁定右值:ss類型與rr不同,rr引用無法直接綁定傳遞的參數ss,那麼會生成一個用ss初始化的int型臨時變量,然後非const引用rr綁定了該臨時變量,之後修改了臨時變量,而不會按預期修改ss。
硬性需求:支持Fortran
FORTRAN語言是Formula Translation的縮寫,意爲“公式翻譯”。它是爲科學、工程問題或企事業管理中的那些能夠用數學公式表達的問題而設計的,其數值計算的功能較強。
從示例中可以看出,支持常量左值引用綁定右值非常有必要。
從彙編查看實現方法
從示例可以看出:當常量左值引用綁定右值時,編譯器根據常亮左值引用的作用域,在棧或堆上新建臨時變量,其生命週期與常量左值引用保持一致。那麼倒推一下,因爲常量左值引用不可修改的屬性,允許其綁定匿名變量也是可以的。