Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

2 réponses
Avatar
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

2 réponses

Avatar
Samuel Krempp
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

Avatar
James Kanze
ded' writes:

|> 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