为什么可变的说明符被分类为存储类说明符,而不是限定符?

时间:2016-05-08 06:10:56

标签: c++ language-lawyer language-design mutable storage-class-specifier

当在非静态数据成员的声明中使用mutable说明符时,无论对象的其余部分是否被视为const,数据都是可变的。有了这个事实,我们可能很容易产生mutable说明符与const限定符相同的印象,结果证明这不是真的。实际上,该语言将mutable说明符分类为存储类说明符。这非常违反直觉,因为mutable没有指定存储持续时间。

这项设计决定背后的理由是什么?

如果mutable是限定符,那么它的逻辑性会不会低于它?

使其成为存储类说明符有什么好处?

1 个答案:

答案 0 :(得分:11)

cv-qualifier 修改/限制对象的语义; mutable没有。在几乎所有情况下,它都是类型的一部分是多余的,同时需要更多关于指针转换的段落等。

因此,决定使其成为 decl-specifier ,而不是类型说明符。由于const可以将对象放入写保护内存,mutable可以导致对象不被放入此类存储中,这表明它是存储类说明符