class T
{};
class AccessT
{
public:
boost::shared_ptr<const T> getT() const {return m_T;}
boost::shared_ptr<T> getT() {return m_T;}
private:
boost::shared_ptr<T> m_T;
};
Run Code Online (Sandbox Code Playgroud)
问题>我在遗留项目中看到了许多类似的代码.我真的不明白这样做的意义.为什么不简单地提供以下内容:
class T
{};
class AccessTModified
{
public:
boost::shared_ptr<T> getT() const { return m_T; }
private:
boost::shared_ptr<T> m_T;
};
Run Code Online (Sandbox Code Playgroud)
初始参数可能是boost::shared_ptr<const T> getT() const不允许const对象意外修改T. 如果是这种情况,所有这些功能应该提供两种版本吗?对我来说,我觉得很乏味!
你是对的:目的boost::shared_ptr<const T> getT() const是确保const对象不会意外地修改T.
在C++中,这被称为const正确性,通常被认为是很好的C++设计.正如您所说,它通常会导致getter有两个版本(a const和非const版本).它可能最初很乏味(虽然一旦你习惯它也不错),但结果可能非常有用.Const正确性允许您声明函数
void DoSomething(const AccessT& item);
Run Code Online (Sandbox Code Playgroud)
承诺不修改,item以便编译器抛出错误,如果DoSomething任何声明可能修改item.
虽然const正确性通常被认为是很好的C++设计,但是一些开发人员认为必须声明某些函数的const和非const版本的开销比它的价值更麻烦.
如果您对更多信息感兴趣,C++ FAQ有关于const正确性的整个部分.
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |