Durante il refactoring di un codice C++ 11, mi sono imbattuto in una cosa strana. Vale a dire, sembra essere impossibile definire una (const
, volatile
o const volatile
) classe base CV-qualificata, ad esempio:Classi di base qualificate CV in C++
struct A { int a = 0; };
struct B: A const {}; // Error here with Clang and GCC!
Tuttavia, i seguenti compilazioni senza errori:
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;
}
ho due domande:
- Cosa negli standard C++ proibisce di definire una classe base qualificata CV, se non del tutto?
- Perché compila il secondo esempio?
PS: Dal momento che si tratta di un linguaggio di avvocato domanda, si prega di fornire riferimenti alla norma C++.
Si può ancora utilizzare la composizione const ... – Jarod42
Aggiungendo a ciò jarrod42 detto, che cosa significa "B è un' const' A" significa? Anche B 'const', allora? – rubenvb