2008-10-16 25 views

Respuesta

30

¿Qué significa "const class"? Parece compilar ok.

No es para mí no lo es. Creo que tu compilador solo es cortés e ignora eso.

Editar: Sí, VC++ silencio ignora la const, GCC se queja.

+3

Voy a decir que parece un caso marginal que VC++ se está equivocando –

+0

Parece; el 'const' no afecta nada de lo que puedo encontrar. –

+0

VC++ digiere realmente un montón de código mal formado (estoy usando 2013 ahora). Parece que lo probaron solo por caminos felices. – ubik

17

Si tuviera esto:

entonces significaría claramente que 'a' es const. De lo contrario, creo que es probablemente inválido C++.

+0

¡Buenas funciones olvidadas de C++! Recuerdo haber hecho cosas así en C hace mucho tiempo. –

41

El const no tiene sentido en ese ejemplo, y su compilador te dará un error, pero si usted lo utiliza para declarar variables de esa clase entre el cierre } y la ;, a continuación, que define aquellos supuestos const, por ejemplo:


const class A 
{ 
public: 
    int x, y; 
} anInstance = {3, 4}; 

// The above is equivalent to: 
const A anInstance = {3, 4}; 
+2

No encuentro una justificación para que esto sea un error. Los compiladores pueden emitir advertencias a voluntad, pero solo el estándar determina lo que cuenta como un error. – MSalters

+0

Porque estás declarando algo como const que no lo es. Esto es algo que nunca es lo que quieres hacer, y por lo tanto debería ser un error. El estándar debe determinar qué es correcto; definir cada cosa incorrecta sería demasiado trabajo. – Bernard

+0

Creo que el término utilizado en la norma es "deficiente". El estándar no dice lo que no está permitido, solo lo que es. Esta no es una sintaxis válida de C++, por lo tanto no está permitida. – KeithB

7

No tiene sentido a menos que se declare una instancia de la clase después, como este ejemplo:

const // It is a const object... 
class nullptr_t 
{ 
    public: 
    template<class T> 
     operator T*() const // convertible to any type of null non-member pointer... 
    { return 0; } 

    template<class C, class T> 
    operator T C::*() const // or any type of null member pointer... 
    { return 0; } 

    private: 
    void operator&() const; // Can't take address of nullptr 

} nullptr = {}; 

un interinoImplementaciónsi está esperando C++ 0x.

Cuestiones relacionadas