又名。如何防止 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/