Avertissement: je suis conscient qu'il y a deux questions sur l'utilité de la const-correctness, cependant, aucun discuté de la façon dont const-correct est nécessaire en C++, contrairement à d'autres langages de programmation. Aussi, je ne suis pas satisfait des réponses fournies à ces questions.
J'ai utilisé un peu de langages de programmation aujourd'hui, et la chose qui me dérange en C++, c'est la notion de const-correct. Il n'y a pas de notion en Java, C#, Python, Ruby, Visual Basic, etc., cela semble être très spécifique au C++.
Avant de me référer à la C++ FAQ Lite, je l'ai lu, et il ne me convainc pas. Parfaitement valides, fiables les programmes sont écrits en Python tout le temps, et il n'y a pas de mot-clé const ou l'équivalent. En Java et en C#, les objets peuvent être déclarées final (ou const), mais il n'y a pas const fonctions de membre ou const paramètres de la fonction. Si une fonction n'a pas besoin de modifier un objet, il peut prendre une interface qui fournit uniquement un accès en lecture à l'objet. Cette technique peut également être utilisé en C++. Sur les deux monde réel C++ systèmes que j'ai travaillé, il y avait très peu d'utilisation de const n'importe où, et tout a bien fonctionné. Donc, je suis loin d'être vendus sur l'utilité de laisser const contaminer une base de code.
Je me demande ce que c'est en C++, qui rend const nécessaire, contrairement à d'autres langages de programmation.
Jusqu'à présent, j'ai vu qu'un seul cas où const doit être utilisé:
#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());
}
La compilation de ce avec const commenté est accepté par Visual Studio, mais avec avertissement C4239, la non-extension standard utilisé. Donc, si vous voulez la syntaxiques brièveté du passage dans temporaires, en évitant les copies, et de rester conforme à la norme, vous devez passer par référence const, pas moyen de contourner cela. Encore, c'est plus un caprice qu'une raison fondamentale.
Sinon, il n'y a vraiment pas de situation où const doit être utilisé, sauf lors de l'interfaçage avec d'autres code qui utilise const. Const me semble, à peu de chose qu'un moralisateur, la peste qui se propage à tout ce qu'il touche :
La raison qui const fonctionne en C++ est parce que vous pouvez le jeter au loin. Si vous ne pouvais pas le jeter loin, alors votre monde serait sucer. Si vous déclarez une méthode qui prend un const Bla, vous pourriez passer une non-const Bla. Mais si c'est le inverse, vous ne pouvez pas. Si vous déclarer une méthode qui prend un non-const Bla, vous ne pouvez pas passer à un const Bla. Alors maintenant, vous êtes coincé. Si vous progressivement besoin d'une version de const tout ce qui n'est pas const, et vous jusqu'à la fin avec un monde de l'ombre. En C++, vous sortir avec elle, parce que, comme avec rien en C++ c'est purement facultatif si vous voulez vérifier ou non. Vous pouvez simplement frapper la constness loin si vous ne l'aimez pas.
Anders Hejlsberg (C# architecte), CLR Choix de Conception