是否有支持右值的 ref 的指针版本?

Is There a Pointer Version of ref that Supports Rvalues?

这真的是关于 ref 的两个问题合而为一:

  1. 我可以对右值使用 ref 吗?显然,作为程序员,我有责任确保它比任何调用代码都长。
  2. 是否有ref的指针版本?

这两个粗略问题的目标在这个粗略的答案中实现了: 我宁愿只创建一个指向 vector::data 右值的指针,也不愿创建一个 temp 变量.

  1. 不,界面阻止了这一点,正如您 link 所显示的那样。有一个重载采用 lvalue 引用;使用 rvalue 引用的那个被删除了。很难想象您如何能够在无法通过 lvalue.

  2. 访问对象的情况下对对象的生命周期负责
  3. 那将是一个指针。 reference_wrapper 的目的是允许引用像值一样传递(常规引用不能),同时保留引用的语法(使用指针会丢失)。如果你想按值传递一个指针,并让它像一个指针一样,那么就使用一个指针。

I'd rather just create a pointer to the vector::data rvalue than create a temp variable.

那将是一个指向临时文件的指针。在您可以对其进行任何操作之前,临时对象将被销毁,使指针无效。正如您所说,您需要对其生命周期负责,这可以通过创建变量来实现。一旦你有了它,你就有了一个 lvalue.