En C , les objets temporaires créés lors d'une expression ne peuvent être affectés qu'à des références const, mais pas non-const références. Cela a soulevé des questions sur la justification de cette restriction.
L'explication conventionnelle est basée sur les dangers potentiels liés à la modification d'objets temporaires. Si une référence non const à un temporaire était autorisée, elle pourrait être involontairement modifiée, entraînant des conséquences imprévisibles. Cependant, les critiques soutiennent que la lecture à partir d'objets temporaires est tout aussi risquée et devrait également être restreinte.
Pour comprendre cette distinction, considérons l'exemple suivant :
String& a = String("test"); // Error const String& a = String("test"); // Ok
La première ligne est une erreur, tandis que la deuxième ligne est valide. Cela suggère que C ne se préoccupe pas de lire des objets temporaires. Alors pourquoi l'écriture est-elle interdite ?
La réponse réside dans un aspect fondamental du C : les paramètres des fonctions. Si les références non const aux temporaires étaient autorisées, cela créerait une ambiguïté lors du passage d'objets temporaires à des fonctions qui acceptent des références. Par exemple :
void inc(double& x) { x += 0.1; } int i = 0; inc(i);
Dans cet exemple, lorsque i est passé à inc(), il n'est pas clair si une référence à i est prévue ou si une copie temporaire de i doit être créée. Cette ambiguïté peut conduire à des erreurs subtiles.
En interdisant les références non const aux temporaires, C garantit que les paramètres de fonction font toujours référence à des lvalues (objets non temporaires). Cela élimine le risque de confusion et favorise la clarté du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!