我经常const在处理内存数据结构时使用并保持我的代码const-correct,但我不确定const应该如何应用于更复杂的对象,例如:
应该用什么const方法表示这些对象?我可以想到几种可能性:
mutable.虽然我意识到这mutable是设计的目的,但使用它时,这感觉就像是一个黑客.另外,鉴于const意味着"我保证不会修改它",当方法可能以奇怪和奇妙的方式修改连接状态时(只要它们保持封装),将它应用为缓存结果似乎是正确的.他们想要的,如果连接失败则抛出异常,等等.哪种方法最有用?哪个最常见?
这是一个很难的问题。我现在实际上正在做同样的事情。我有一个由 MySQL 数据库支持的大型内存数据结构。我从“尽可能使用 const”的方法开始,但事实证明这种情况在实践中并不常见:
SELECT语句实际上都是只读的。例如,SELECT GET_LOCK肯定会修改数据库端的状态。mutable正确使用的C++程序员。我当然没有太多的经验。未来的维护者可能会造成比可变解决方案更多的问题。您最了解您的团队,因此是否愿意走那条路取决于您。我认为具有数据库单个可变句柄的 const 对象可能是最优雅的解决方案。确定 const 对象应该能够合理地执行哪些操作,并将所有这些函数设置为 const。你的类的用户只需要知道哪些函数是const,哪些不是。头文件将为他们提供这一点。他们不需要知道为什么特定函数是 const 或非常量。我确实同意,一堆可变成员开始看起来很黑客。
就我而言,我基本上不得不放弃常量正确性。一个 const 对象会被束缚住,无法做任何有用的事情。根据我多年的经验,我怀疑这就是实践中经常发生的情况。逻辑 const 正确性是一个很好的理想(如果您从头开始构建,那么您绝对应该从那里开始),但是当涉及到真正的交付代码时,没有 const 是可行的方法。