如何安全地保持C ++ const引用?

时间:2016-12-01 21:46:03

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

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

我们有一个基本上如下的课程:

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

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

也就是说,这些对象将会保持&#34;他们通过了const-ref。

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

我们有什么选择来防止意外绑定到临时?

将签名更改为(const T* px)在技术上会起作用(在此处获取临时地址是编译器警告=错误),由于其他原因,它不是很有吸引力。

旁注:是的,这将永远存在潜在的终身管理问题,但到目前为止,由于其有限的使用模式,真实的东西工作得很好 - 但偶然传递临时工具已经在实践中,我们希望首先解决这个问题。

1 个答案:

答案 0 :(得分:5)

您可以添加右值引用过载,并将其删除:

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

如果有人试图传递一个临时的,那么就会发出编译错误。