【发布时间】:2014-06-23 16:56:14
【问题描述】:
当一个函数不修改对象参数时,我总是让它请求一个常量引用,即使引用的对象不是真正的常量。这是错的吗?
对于包装类,我想这样写:
template<class B>
class Wrapper{
private:
B* base_;
public:
Wrapper(const B& b) { base_ = const_cast<B*>(&b); }
void ModifyBase();
};
构造函数不会修改基类,因此它要求一个常量引用。
包装器有一些方法需要修改基数,因此它需要存储一个非常量指针(因此是转换)。
我觉得我的解决方案不是最好的。
有没有更好的方法来做到这一点?
有什么公认的约定吗?
【问题讨论】:
-
我想如果你想修改参数是错误的。据我了解,
const在参数中的意思是“我只需要看到这个值 - 我不会用它做任何事情!”。 -
X const x; Wrapper<X> w(x); w.ModifyBase();你有未定义的行为。不要剥离 const,除非您希望 only 弄乱类型系统(不推荐使用的 API,DRY)。如果您打算修改对象,请不要去掉 const。
标签: c++ casting constants conventions