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

标签 c++ pointers reference ref rvalue

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

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

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

最佳答案

  1. 不,界面会阻止这种情况,正如您链接到的引用所示。有一个采用左值 引用的重载;采用rvalue 引用的那个被删除。很难想象如果不能通过左值访问对象,您如何能够对对象的生命周期负责。

  2. 那将是一个指针。 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/

相关文章:

c++ - 如何打印递归 lambda 模板的名称?

c++ - 指向const对象的指针可以改变对象吗?

PHP、SPL预定义常量

C++ 将 'main' 声明为对函数的引用?

c++ - 我在这里应用 Dijkstra 算法哪里出错了?

c++ - 如何为 Windows 实现终端仿真器?

c++ - Qt 应用程序和 Google Breakpad

c - 带有链表的无限循环

c - 如何从 char** 获取 char*

vector - 为什么迭代 i32 的向量会引用 i32 (&i32)?