我目前正在寫我的學位論文,它也涉及到一些C++ 11背後的理論解釋,它非常好,因爲C++是我選擇的編程語言,並且標準可以免費獲得(N3337)自己迷失了。是否是臨時對象xvalues?
然而,我試圖準確而詳細地解釋新的xvalue類別時遇到了困難。
這是我的理解,臨時對象始終是一個xvalue,但我無法在標準中找到任何對此的引用。
我的理解是,對具有非引用返回類型的函數的函數調用表達式的值類別是xvalue。該標準說,「一個xvalue是涉及右值引用的某種表達式的結果」,這正在擾亂我。例如:
TestClass { ... };
testClass createObject() { return testClass(); }
void someFunction(TestClass& testClass) { ... }
void someFunction(TestClass&& testClass) { ... }
someFunction(createObject());
以上將按預期調用重載函數,該函數以rvalue-reference爲參數。然而,createObject()不返回一個右值引用,它返回一個TestClass類型的臨時對象。我現在的問題是,我必須解釋它背後的原因。表達式「createObject()」評估的是什麼?如果它確實是一個xvalue,因爲它返回一個臨時對象,其背後的推理是清晰的,並且在重載解析期間右值引用是有利的。如果沒有,這個標準的行爲解釋是什麼?是否有一些隱式轉換邏輯定義在我還沒有找到的地方?
如果有人能幫我解決這個問題,我真的很感激,因爲即使經過了幾天的挖掘和閱讀,我還沒有想出一個合理的解釋。提前致謝。
[相關問題](http://stackoverflow.com/questions/6609968/) – fredoverflow 2012-03-12 17:33:39