¿Por qué la const-corrección es específica de C ++?

Descargo de responsabilidad: soy consciente de que hay dos preguntas sobre la utilidad de const-correctness, sin embargo, ninguna discutió cómo es necesaria la corrección de const en C ++A diferencia de otros lenguajes de programación. Además, no estoy satisfecho con las respuestas proporcionadas a estas preguntas.

He usado algunos lenguajes de programación ahora, y una cosa que me molesta en C ++ es la noción de constricción correcta. No existe tal noción en Java, C #, Python, Ruby, Visual Basic, etc., esto parece ser muy específico para C ++.

Antes de remitirme a C ++ FAQ Lite, lo he leído y no me convence. Los programas confiables y perfectamente válidos están escritos en Python todo el tiempo, y no hay una palabra clave constante o equivalente. En Java y C #, los objetos se pueden declarar finales (o const), pero no hay funciones miembro const ni parámetros de función const. Si una función no necesita modificar un objeto, puede tomar una interfaz que solo proporcione acceso de lectura al objeto. Esa técnica puede ser utilizada igualmente en C ++. En los dos sistemas C ++ del mundo real en los que he trabajado, se utilizó muy poco const en cualquier lugar y todo funcionó bien. Por lo tanto, estoy lejos de venderme por la utilidad de dejar que Const contamine un código base.

Me pregunto qué es lo que hace que sea necesario constar en C ++.A diferencia de otros lenguajes de programación.

Hasta ahora, he visto un solo caso donde constdebe ser usado:

#include <iostream>

struct Vector2 {
    int X;
    int Y;
};

void display(/* const */ Vector2& vect) {
    std::cout << vect.X << " " << vect.Y << std::endl;
}

int main() {
    display(Vector2());
}

Compilar esto con const comentado es aceptado por Visual Studio, pero con advertenciaC4239, extensión no estándar utilizada. Por lo tanto, si desea la brevedad sintáctica de pasar temporarios, evitar copias y cumplir con el estándar, tiene que pasar por referencia constante, de ninguna manera. Aún así, esto es más como una peculiaridad que una razón fundamental.

De lo contrario, realmente no hay una situación en la que deba usarse const, excepto cuando se interactúa con otro código que usa const. Const me parece poco más que una plaga de justicia propia que se propaga a todo lo que toca:

La razón por la que const funciona en C ++ es porque puedes desecharlo. Si no pudieras desecharlo, tu mundo apestaría. Si declara un método que toma un Bla constante, podría pasarlo un Bla no constante. Pero si es al revés no puedes. Si declara un método que toma un Bla no constante, no puede pasarlo por un Bla constante. Así que ahora estás atascado. Así que gradualmente necesitas una versión constante de todo lo que no es constante, y terminas con un mundo de sombras. En C ++, se sale con la suya, porque como con cualquier cosa en C ++ es puramente opcional si desea o no esta comprobación. Si no te gusta, puedes eliminar la constancia.

Anders Hejlsberg (arquitecto C #),CLR Design Choices

Respuestas a la pregunta(14)

Su respuesta a la pregunta