15

指定子が非静的データ メンバーの宣言で使用される場合mutable、オブジェクトの残りの部分が const として扱われるかどうかに関係なく、データは変更可能です。この事実により、指定子は修飾子mutableと同じ種類のものであるという印象を簡単に持つことができますが、これは正しくないことがわかります。const実際、言語はmutable指定子をストレージ クラス指定子として分類します。mutableは保存期間を指定しないため、これは非常に直感に反します。

この設計上の決定の背後にある理論的根拠は何ですか?

mutable修飾子の 場合よりも論理的でない理由は何ですか?

それをストレージ クラス指定子にする利点は何ですか?

4

1 に答える 1

11

cv-qualifiers modify/restrict the object's semantics; mutable does not. It being part of the type would be superfluous in practically all scenarios, while necessitating more paragraphs about pointer conversions etc.

Thus it was decided to make it a decl-specifier that isn't a type-specifier. Since const can cause an object to be put into write-protected memory, mutable can cause an object not to be put into such storage, suggesting it is a storage-class-specifier.

于 2016-05-08T13:24:06.270 に答える