c++ - 如何安全地保留 C++ const 引用?

标签 c++ pass-by-const-reference

又名。如何防止 const& 参数意外绑定(bind)到临时参数?

我们有一个类,本质上是这样的:

template<typename T>
struct Observer {
  const T* target;

  void observe(const T& x) {
     target = &x;
  }
};

也就是说,这些对象将“保留”它们传递的 const-ref。

我们遇到了一个错误,observe 函数意外地传递了一个临时对象 - 对于这种情况,该对象永远不会有效。

我们有哪些选项可以防止意外绑定(bind)到临时对象?

将签名更改为 (const T* px) 从技术上讲是可行的(此处获取临时地址是编译器警告=错误),但由于其他原因,它并不是很有吸引力。

旁注:是的,这总是存在潜在的生命周期管理问题,但到目前为止,由于其有限的使用模式,实际的东西运行得很好 - 但是意外地传递临时变量已经被观察到在实践中,因此我们希望首先解决这个问题。

最佳答案

您可以添加右值引用重载,然后将其删除:

void observe(const T&& x) = delete;

现在,如果有人尝试传递临时值,将会发出编译错误。

关于c++ - 如何安全地保留 C++ const 引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40920980/

相关文章:

java - 寻找一个类似Cppcheck的Java开发工具

c++ - 我需要动态指定数组的大小

C++/Win32 - 如何迭代特定进程的线程列表并将起始地址解析为模块?

c++ - 当 const 引用参数绑定(bind)到右值时,它是否保留其 "status"?

c++ 通过 const 引用传递

c++按值传递的复制构造函数参数

c++ - 从文件中读取绘图点然后缩放

c++ - 通过引用和值传递

C++ pass-by-non-const-reference 方法 inside pass-by-const-reference 方法

c++ - 在 Qt 中发送信号时的 const-ref