Maison > développement back-end > C++ > Pourquoi ne puis-je pas utiliser une référence non-const pour lier un objet temporaire en C ?

Pourquoi ne puis-je pas utiliser une référence non-const pour lier un objet temporaire en C ?

Mary-Kate Olsen
Libérer: 2024-12-25 03:26:27
original
752 Les gens l'ont consulté

Why Can't I Use a Non-Const Reference to Bind a Temporary Object in C  ?

Pourquoi pas une référence non-const à des objets temporaires ?

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
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal