Restrictions de liaison de référence non const
En C , les références const peuvent se lier à des lvalues du même type et à des types non liés. Cependant, les références non const sont confrontées à des restrictions supplémentaires lors de la liaison à des lvalues.
Échec de liaison de Lvalue non lié
Considérez le code suivant :
int a; double &m = a; // error: non-const lvalue reference to type 'double' cannot bind to a value of unrelated type 'int'
Ici, la référence non const m est tentée d'être liée à une lvalue de type int. Cela échoue car les références non const ne peuvent pas se lier à des lvalues non liées.
Interdiction de liaison d'objet temporaire
Les références non const ne peuvent pas non plus se lier à des objets temporaires. Par exemple :
double &m = a; // compilation error: temporary bound to non-const reference
Dans ce cas, l'affectation de a à m implique de convertir un int en double et de créer un objet temporaire. Les références non const ne peuvent pas se lier à de tels objets temporaires.
La raison derrière cette restriction est que les références non const nécessitent l'accès à l'adresse de l'objet d'origine, ce qui n'est pas possible pour les objets temporaires puisqu'ils sont détruits immédiatement après utilisation. .
Extension du compilateur Visual Studio
Il est important de noter que dans Visual Studio, cette erreur peut ne se produit pas en raison d'une extension du compilateur qui permet la liaison à des objets temporaires dans certains cas. Cependant, d'autres compilateurs comme GCC appliqueront strictement la règle non contraignante.
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!