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