最近由于工作需要,我阅读了很多关于 C++右值方面的材料。在 C++中,右值是一个非常重 要的概念,它对于理解 C++的内部机制和实现高效代码至关重要。本文将总结了 10 个关于 右值的实践经验。

  1. C++右值有两种:纯右值、将亡值。右值引用可以延长将亡值的生命周期,使得将亡值 能够被正常使用,而不会被错误地释放。
  2. 右值引用的一个作用是延长右值的生命周期。右值引用可以延长将亡值的生命周期,使 得将亡值能够被正常使用,而不会被错误地释放。
  3. 临时对象作为右值处理。这种对象往往会在一些表达式中自动创建,然后被立即使用。 使用右值引用来绑定临时对象,可以让程序更高效地处理这些对象,避免了不必要的内 存拷贝操作。
  4. 移动构造函数尽可绑定右值非常量。这是因为右值非常量可以被修改,而右值常量则不 能。移动构造函数会破坏源对象,所以只有右值非常量才能被移动构造函数绑定。
  5. 对于一个右值对象,允许调用成员函数。这与左值对象类似。但需要注意的是,对于一 个将亡值,如果其生命周期结束,那么调用其成员函数可能会导致程序出现未定义行 为。
  6. 右值可以被修改(这也说明了其可以被破坏)。因此,在使用右值时需要谨慎处理,以 避免因为修改了右值而导致程序出现问题。
  7. 右值不能当作左值使用,左值可以当作右值使用。这是因为左值具有实际地址,并且与 右值有同样地表现。
  8. 常量左值引用可以绑定到右值。这种引用可以避免将右值对象修改的风险,同时还可以 延长右值的生命周期,使其能够被正常使用。
  9. 返回右值引用的函数在几乎所有情况下是糟糕的。因为返回右值引用往往会导致右值的 生命周期延长,从而使其可能被错误地使用。对于返回右值的函数,建议使用值返回的 方式。
  10. 在大部分情况下 return 中使用是 std::move 并不会将事情变得更好,相反该操作会 阻止编译器进行返回值优化。