是否有支持右值的 ref 的指针版本?
Is There a Pointer Version of ref that Supports Rvalues?
这真的是关于 ref
的两个问题合而为一:
- 我可以对右值使用
ref
吗?显然,作为程序员,我有责任确保它比任何调用代码都长。
- 是否有
ref
的指针版本?
这两个粗略问题的目标在这个粗略的答案中实现了: 我宁愿只创建一个指向 vector::data
右值的指针,也不愿创建一个 temp
变量.
不,界面阻止了这一点,正如您 link 所显示的那样。有一个重载采用 lvalue 引用;使用 rvalue 引用的那个被删除了。很难想象您如何能够在无法通过 lvalue.
访问对象的情况下对对象的生命周期负责
那将是一个指针。 reference_wrapper
的目的是允许引用像值一样传递(常规引用不能),同时保留引用的语法(使用指针会丢失)。如果你想按值传递一个指针,并让它像一个指针一样,那么就使用一个指针。
I'd rather just create a pointer to the vector::data
rvalue than create a temp variable.
那将是一个指向临时文件的指针。在您可以对其进行任何操作之前,临时对象将被销毁,使指针无效。正如您所说,您需要对其生命周期负责,这可以通过创建变量来实现。一旦你有了它,你就有了一个 lvalue.
这真的是关于 ref
的两个问题合而为一:
- 我可以对右值使用
ref
吗?显然,作为程序员,我有责任确保它比任何调用代码都长。 - 是否有
ref
的指针版本?
这两个粗略问题的目标在这个粗略的答案中实现了: 我宁愿只创建一个指向 vector::data
右值的指针,也不愿创建一个 temp
变量.
不,界面阻止了这一点,正如您 link 所显示的那样。有一个重载采用 lvalue 引用;使用 rvalue 引用的那个被删除了。很难想象您如何能够在无法通过 lvalue.
访问对象的情况下对对象的生命周期负责
那将是一个指针。
reference_wrapper
的目的是允许引用像值一样传递(常规引用不能),同时保留引用的语法(使用指针会丢失)。如果你想按值传递一个指针,并让它像一个指针一样,那么就使用一个指针。
I'd rather just create a pointer to the
vector::data
rvalue than create a temp variable.
那将是一个指向临时文件的指针。在您可以对其进行任何操作之前,临时对象将被销毁,使指针无效。正如您所说,您需要对其生命周期负责,这可以通过创建变量来实现。一旦你有了它,你就有了一个 lvalue.