【发布时间】:2016-12-01 21:46:02
【问题描述】:
又名。如何防止const& 参数意外绑定到临时参数?
我们有一个基本上看起来像这样的类:
template<typename T>
struct Observer {
const T* target;
void observe(const T& x) {
target = &x;
}
};
也就是说,这些对象将“保留”它们传递的 const-ref。
我们遇到了一个错误,即 observe 函数意外地传递了一个临时对象 - 在这种情况下永远不会有效。
我们有哪些选项可以防止意外绑定到临时对象?
将签名更改为(const T* px) 在技术上可行(获取临时地址在这里是编译器警告=错误)由于其他原因它不是很有吸引力。
旁注:是的,这总是会存在潜在的生命周期管理问题,但到目前为止,由于其有限的使用模式,真实的东西运行良好 - 但观察到意外传递临时对象在实践中,所以我们可能想先解决这个问题。
【问题讨论】:
-
void observe(T&&) = delete;有什么问题? -
delete采用T &&参数的重载。
标签: c++ pass-by-const-reference