一部のC++ 11コードをリファクタリングしているうちに、私は奇妙なことに遭遇しました。すなわち、CV-資格(const
、volatile
またはconst volatile
)基底クラス、例えばを定義することは不可能であるように思わ:C++のCV修飾ベースクラス
struct A { int a = 0; };
struct B: A const {}; // Error here with Clang and GCC!
ただし、以下はエラーなしでコンパイル:
struct A { int a = 0; };
using AC = A const;
struct B: AC {}; // NO ERROR HERE!? Qualifiers are ignored.
int main() {
B b;
b.a = 42; // NO ERROR modifying a field of const base.
return b.a;
}
私は2つを持っています質問:
- C++標準ではCV認定ベースクラスの定義は禁止されていますか?
- 2番目の例はなぜコンパイルされますか?
PS:これは言語弁護士質問ですので、C++標準への参照を提供してください。
あなたはまだconstの組成物を用いることがあります... – Jarod42
jarrod42が言ったことに加えて、「'Bをconst'される」何を意味するのでしょうか? Bも 'const'ではないですか? – rubenvb