是否存在可变含义逻辑const的强制机制?

时间:2014-07-02 10:33:11

标签: c++ const language-lawyer mutable

C ++关键字mutable允许我们在const对象中使用非const成员。这提出了一个问题,'什么?为什么?!',已经在SO上解决了。

Does the 'mutable' keyword have any purpose other than allowing the variable to be modified by a const function?

选择的答案是mutable的正确用法是表示逻辑const而不是bitwise const。关于SO的其他几个问题和答案提出了同样的观点。我喜欢这些答案概念,但它们是否意味着什么?

C ++中没有机制来强制执行逻辑const,同时允许我知道的按位可变性。为了理解表面价值,使用mutable会要求编译器推断出对可变成员的任何可能写入是否会导致等于运算符评估为false,这只是愚蠢。

Herb Sutter的博客确认逻辑const至少是可变的 intent

http://herbsutter.com/2013/05/24/gotw-6a-const-correctness-part-1-3/

“类似地,在成员变量上写入mutable意味着它一直意味着什么:变量是”可写的但逻辑上是常量的。“”

这不仅仅是一种意图吗?标准本身非常简洁可变,我找不到“逻辑常量”的定义。

是否永远这样一种情况,即对const对象的可变成员的写入违反“逻辑常量”不仅仅是一种美学上令人不悦的设计吗?

1 个答案:

答案 0 :(得分:1)

"逻辑const"不能仅靠平等来决定。它还可能包括排序和任何散列函数(包括其他翻译单元中的自由函数)。编译器没有合理的方法来确定究竟是什么有助于逻辑常量,因此它无法确定任何可变成员是否会影响这种常量。