C++11 xvalue/prvalue类别真的重要吗?
创建xvalue的唯一方法是使用静态转换。 是的,还有其他三种情况,但所有这些情况都需要另一个xvalue。所以,为了简单起见,我假设这是目前唯一的方法 我们需要把东西传给演员。让我们称之为“gizmo”。 无论gizmo的左值或右值是什么,静态_cast的结果都是对完全相同的对象的右值引用,我的意思是它不会生成任何临时对象。对于对象,结果的值类别将是prvalue或xvalue。让我们考虑第二种情况。 我知道xvalue比prvalue更适合对象,因为它具有动态类型;但奇怪的是,我不知道任何带有«gizmo»的操作,其生成的prvalue包含对同一事物的引用:看起来所有将«gizmo»转换为prvalue的操作(如static_castC++11 xvalue/prvalue类别真的重要吗?,c++11,xvalue,C++11,Xvalue,创建xvalue的唯一方法是使用静态转换。 是的,还有其他三种情况,但所有这些情况都需要另一个xvalue。所以,为了简单起见,我假设这是目前唯一的方法 我们需要把东西传给演员。让我们称之为“gizmo”。 无论gizmo的左值或右值是什么,静态_cast的结果都是对完全相同的对象的右值引用,我的意思是它不会生成任何临时对象。对于对象,结果的值类别将是prvalue或xvalue。让我们考虑第二种情况。 我知道xvalue比prvalue更适合对象,因为它具有动态类型;但奇怪的是,我不知道任何带
struct A {};
int main() {
decltype(auto) a1 = A(); //prvalue, type of a1 is A
decltype(auto) a2 = std::move(A()); //xvalue, type of a2 is A&&
}
在本例中使用auto时,a1和a2都会得到as类型。我不知道您的实际问题是什么。您是否正在寻找xvalue和prvalue行为不同的场景?我试图编写一个代码段,其中不同行为的唯一原因是不同的值类别xvalue/prvalue。但当我尝试将某些东西转换为prvalue时,它实际上会生成临时对象。看起来这种副作用是造成不同行为的主要原因。我尝试过:这个问题可能重复了我读了至少六遍,但我仍然不知道到底问了什么问题。