假设我有以下成员函数:
void CFoo::regWrite( int addr, int data )
{
reg_write( addr, data ); // driver call to e.g. write a firmware register
}
显然,调用此函数不会修改调用它的对象的内部状态。然而,它改变了任何这个的状态Foo
实例代表.
在诸如此类的情况下,应该Foo::regWrite(int addr, int data)
是一个常量函数吗?
你必须决定类的“逻辑常量”的含义是什么CFoo
,这取决于该类的用途。
If CFoo
被解释为参考一些数据,那么通过以下方式修改该数据可能是有意义的const
的实例CFoo
,在这种情况下你的成员函数将是const
。例如,考虑引用某些数据的其他类型——您可以修改a的引用数char *const
or a const std::unique_ptr<char>
.
If CFoo
被解释为拥有一些数据,那么通过 a 禁止修改可能是有意义的const
的实例CFoo
。例如,考虑容器,其中的元素在逻辑上是“对象状态的一部分”,即使它们在物理上不是对象的一部分。所以vector::operator[]
有一个 const 重载,返回一个const T&
而不是一个T&
, the insert
成员函数是非常量函数,等等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)