Opérateur = avec référence non constante

Le
ded'
Bonjour !

Je sais qu'en C++, *en théorie*, les objets temporaires sont constants.
Mais si ce n'est pas le cas pour mon compilateur, rien ne m'empêche de
définir un opérateur qui prend en argument une référence non constante.

Est-ce que cela peut engendrer des bugs et/ou des effets pervers ?

Merci de votre aide!

ded'
--
I would crush my own eyeballs with a crimper before I volunteered to
work on a project with C++. -- Adrian Hosey
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Samuel Krempp
Le #734835
le Saturday 01 May 2004 17:55, écrivit :
Je sais qu'en C++, *en théorie*, les objets temporaires sont constants.
Mais si ce n'est pas le cas pour mon compilateur, rien ne m'empêche de
définir un opérateur qui prend en argument une référence non constante.

Est-ce que cela peut engendrer des bugs et/ou des effets pervers ?


je ne suis pas sûr qu'on puisse vraiment répondre.
Tu dis que tu as un compilateur qui ne se comporte pas conformément a la
norme, et que tu veux définir un opérateur prenant une référence non const.
c'est hyper vague..

M'enfin, avec un compilo buggé tout peut engendrer des bugs ou des effets
pervers, alors bon, ma réponse est : oui.

;p
--
Sam

James Kanze
Le #734559
ded'
|> Je sais qu'en C++, *en théorie*, les objets temporaires sont
|> constants.

Pas du tout, voire la discussion récente sur comp.lang.c++.moderated
(entre John Potter et moi). Un objet temporaire n'est pas const. En
révanche, on ne peut pas s'en servir pour initialiser une
référence. (Plus exactement, on ne peut pas se servir d'un rvalue
pour initialiser une référence.)

|> Mais si ce n'est pas le cas pour mon compilateur, rien ne
|> m'empêche de définir un opérateur qui prend en argument une
|> référence non constante.

Rien n'empêche en général de définir un opérateur qui
prend une référence non constante. Seulement, tu ne pourrais pas
lui passer un temporaire (ou plus exactement, un rvalue).

Dans la pratique, il y a beaucoup de compilateurs qui le permet, pour
des raisons historiques.

|> Est-ce que cela peut engendrer des bugs et/ou des effets pervers ?

De quel genre ? Tout, mal utilisé, peut engendrer des bugs et des
effets pervers. Si Stroustrup a décidé d'interdire
l'initialisation d'une référence non-const avec un temporaire,
c'était parce que dans l'expérience, c'était assez facile de le
mal utilisé.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Publicité
Poster une réponse
Anonyme