Maison >développement back-end >C++ >Pourquoi les références non const ne peuvent-elles pas se lier à des valeurs L ou temporaires non liées en C ?

Pourquoi les références non const ne peuvent-elles pas se lier à des valeurs L ou temporaires non liées en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-25 22:17:11454parcourir

Why Can't Non-Const References Bind to Unrelated Lvalues or Temporaries in C  ?

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!

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