Después de buscar y reemplazar algunos refactorización que terminó con esta joya:¿Qué significa "clase const"?
const class A
{
};
¿Qué significa "clase const"? Parece compilar ok.
Después de buscar y reemplazar algunos refactorización que terminó con esta joya:¿Qué significa "clase const"?
const class A
{
};
¿Qué significa "clase const"? Parece compilar ok.
¿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.
Si tuviera esto:
entonces significaría claramente que 'a' es const. De lo contrario, creo que es probablemente inválido C++.
¡Buenas funciones olvidadas de C++! Recuerdo haber hecho cosas así en C hace mucho tiempo. –
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};
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
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
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
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.
Voy a decir que parece un caso marginal que VC++ se está equivocando –
Parece; el 'const' no afecta nada de lo que puedo encontrar. –
VC++ digiere realmente un montón de código mal formado (estoy usando 2013 ahora). Parece que lo probaron solo por caminos felices. – ubik