jjzjj

c++ - 什么是非 POD 对象的 xvalue 和 prvalue 之间允许的使用或行为差异的示例?

Whatarervalues,lvalues,xvalues,glvalues,andprvalues?很好地概述了右值/左值的分类,最近对该问题的回答之一(https://stackoverflow.com/a/9552880/368896)强调了右值“类似于”旧式右值,而新的xvalues允许“左值-喜欢”的行为。但是,请考虑以下代码:classX{};Xfoo(){returnX();}intmain(){foo()=X();//foo()isaprvaluethatsuccessfullyappearsonthelhs}在本例中,表达式foo()是出现在左侧的纯右值,并接受赋值

c++ - xvalues、glvalues和prvalues的真实例子?

我想知道是否有人可以讲述或解释一些xvalues、glvalues和prvalues的现实生活示例?我读过一个类似的问题:Whatarervalues,lvalues,xvalues,glvalues,andprvalues?但我不明白每个人的意思。谁能解释一下这些值在什么情况下很重要,什么时候应该使用它们? 最佳答案 考虑以下类:classFoo{std::stringname;public:Foo(std::stringsome_name):name(std::move(some_name)){}std::string&orig

c++ - 什么是 rvalues、lvalues、xvalues、glvalues 和 prvalues?

在C++03中,表达式可以是rvalue或lvalue。在C++11中,表达式可以是:右值左值xvalueglvalueprvalue两个类别变成了五个类别。这些新的表达方式是什么?这些新类别与现有的右值和左值类别有何关联?C++0x中的右值和左值类别是否与C++03中的相同?为什么需要这些新类别?是WG21神只是想迷惑我们这些凡人? 最佳答案 我想这个文档可能会作为一个不那么简短的介绍:n3055整个屠杀从移动语义开始。一旦我们有了可以移动而不是复制的表达式,突然容易掌握的规则要求区分可以移动的表达式以及移动的方向。根据我的草稿猜

c++ - 什么表达式创建 xvalues?

我正在尝试理解C++11的概念。我所说的标准草案:Anxvalue(an“eXpiring”value)alsoreferstoanobject,usuallyneartheendofitslifetime(sothatitsresourcesmaybemoved,forexample).Anxvalueistheresultofcertainkindsofexpressionsinvolvingrvaluereferences(8.3.2).[Example:Theresultofcallingafunctionwhosereturntypeisanrvaluereferenceis

c++ - 什么表达式创建 xvalues?

我正在尝试理解C++11的概念。我所说的标准草案:Anxvalue(an“eXpiring”value)alsoreferstoanobject,usuallyneartheendofitslifetime(sothatitsresourcesmaybemoved,forexample).Anxvalueistheresultofcertainkindsofexpressionsinvolvingrvaluereferences(8.3.2).[Example:Theresultofcallingafunctionwhosereturntypeisanrvaluereferenceis