我目前正在写我的学位论文,它也涉及到一些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