Hasty Briefsbeta

双语

C++: A prvalue is not a temporary

7 months ago
  • #Value Categories
  • #Temporaries
  • #C++
  • 纯右值(prvalue)不一定是临时对象,它代表'对象的理念',仅在必要时才会物化成临时对象。
  • 左值(lvalue)不可被移动,而右值(rvalue)可以。std::move(v)将左值转换为右值(消亡值xvalue)。
  • 纯右值(如std::vector{1,2,3})直接初始化对象而无需创建临时对象,除非需要绑定到引用时例外。
  • 当纯右值必须绑定到引用时会发生临时物化,此时会创建实际的临时对象。
  • 按值返回的函数调用属于纯右值,它们直接初始化对象,避免了不必要的拷贝或移动操作。
  • 纯右值通过避免非必要的临时对象来优化对象初始化,这种优化不依赖于编译器优化技术。