正确性和硬件写入

Dun*_*nie 5 c++ const-correctness

说我有以下成员函数:

void CFoo::regWrite( int addr, int data )
{
  reg_write( addr, data ); // driver call to e.g. write a firmware register
}
Run Code Online (Sandbox Code Playgroud)

显然,调用此函数不会修改调用它的对象的内部状态.但是,它会更改此Foo实例所代表的任何状态.

在这些情况下,应该Foo::regWrite(int addr, int data)是const函数吗?

Ste*_*sop 3

您必须确定该类的“逻辑常量”的含义是什么CFoo,这取决于该类的用途。

如果CFoo被解释为引用某些数据const,那么通过 的实例修改该数据可能是有意义的CFoo,在这种情况下,您的成员函数就是const. 对于这样的示例,请考虑引用某些数据的其他类型 - 您可以修改 achar *const或 a的引用数const std::unique_ptr<char>

如果CFoo被解释为拥有某些数据const,那么通过的实例禁止修改可能是有意义的CFoo。例如,考虑容器,其中的元素在逻辑上是“对象状态的一部分”,即使它们在物理上不是对象的一部分。因此,vector::operator[]有一个 const 重载返回 aconst T&而不是 a T&insert成员函数是非常量的,等等。