SomeClass& some_object = SomeClass();
是什麼some_object指什麼?它有效嗎?還是未定義的行爲?
SomeClass& some_object = SomeClass();
是什麼some_object指什麼?它有效嗎?還是未定義的行爲?
它不是有效的,如在不被編譯:
右邊的值不能結合於非const
左值參考。
然而,一些編譯器,例如MSVC允許綁定右值到非const
左值引用作爲編譯器擴展。
它根本不編譯。
非常量引用(T&
)不允許綁定到臨時對象。您可以綁定到的臨時或const T&
,因爲C++ 11,T&&
,雖然:
const SomeClass& obj = SomeClass();
SomeClass&& obj = SomeClass();
這按照標準是無效的。但是,一些編譯器(特別是MSVC)將允許它作爲擴展。
您被允許分配一個臨時的引用給const,這將導致該臨時被擴展到參考的一生:
{
const SomeClass& some_object = SomeClass();
// more code, some_object is valid
} //some_object is destructed here
您是否嘗試過編譯? –
[How to a non-const reference can not bind to a temporary object?](http://stackoverflow.com/questions/1565600/how-come-a-non-const-reference-cannot-bind-to -a-臨時對象) – Pixelchemist