Maison >développement back-end >C++ >Pourquoi les références Lvalue non-Const ne peuvent-elles pas se lier à des types différents en C ?

Pourquoi les références Lvalue non-Const ne peuvent-elles pas se lier à des types différents en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-03 00:14:111037parcourir

Why Can't Non-Const Lvalue References Bind to Dissimilar Types in C  ?

Liaison de références lvalue non const à des types différents

En C , une référence lvalue non const doit se lier à une lvalue de la même taper. Cela peut prêter à confusion lorsque l'on tente de lier un objet temporaire à une référence non const, comme le montre l'exemple suivant :

int a;
const double &m = a; // This is allowed
double &m = a; // This produces an error

L'erreur "La référence lvalue non const au type 'double' ne peut pas être liée à une valeur de type non lié 'int'", indique qu'une référence d'un type non const ne peut pas se lier à un objet d'un type différent.

La raison de cette restriction est qu'un objet temporaire l'objet ne peut pas être lié à une référence non const. Lorsqu'un est converti en double, un objet temporaire est créé. En conséquence, la ligne de code suivante :

double &m = a;

Tente de lier une référence non const à un objet temporaire, ce qui n'est pas autorisé.

Cependant, il existe une exception à cette règle dans Visual Studio, où une extension du compilateur permet de lier des références non const à des objets temporaires. Cependant, ce comportement n'est pas standard et entraînera une erreur dans d'autres compilateurs comme GCC.

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!

Déclaration:
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