La mayor parte no tiene sentido.
Especificador y calificador se definen en la norma C++. Calificador es solo una parte integral de un especificador. Por ejemplo, tipo especificador en una declaración puede incluir cv-calificadores. No veo la razón para citar todo el estándar sobre este tema.
Cv-calificadores no están restringidos a lvalues. Los valores R de clase también pueden ser calificados por el cv. Es posible cv-calificar un valor r de tipo no de clase, pero no tendrá ningún efecto y se ignorará.
El uso de const
calificador que usted muestra en su ejemplo con foo
es sólo una forma sintáctica, que en realidad significa que la const-calificativo se aplica a la implícita this
parámetro del método foo
: const A* this
. Es decir. en este caso sí califica un lvalue, pero es *this
, no foo
.
El término calificador también aparece en el contexto de nombres cualificados. Nombre como some_class::some_member
(o some_namespace::some_name
) se llaman nombres calificados y la parte some_class::
es calificador.
La idea de que si algo es un lvalue, entonces puede modificarlo es totalmente incorrecto. Hay modificables lvalues y no modificables lvalues. Un objeto declarado como const int i = 5
es un lvalue, pero no puede modificarlo. Las funciones ordinarias también son valores en C++, pero no se puede modificar una función.
+1 para "No veo el motivo para citar todo lo que se encuentra en el estándar sobre este tema". A veces me pregunto si la gente piensa que la simple inclusión de alguna cita aleatoria estándar hace que su respuesta sea menos incorrecta (no estoy hablando de este hilo, pero hay muchos hilos de respuesta divertidos sobre SO, por desgracia, ese es el caso). –
Oye, alguien probó lo que dije ayer: http://meta.stackexchange.com/questions/51469/dont-forget-to-mention-sql-injection/51474#51474 –