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

Surcharge d'opérateur avec uniquement des types standards.

3 réponses
Avatar
Loïc Joly
Bonjour,

Je sais qu'il est interdit d'écrire une surcharge, par exemple, de
l'opérateur + qui prenne en paramètre deux types de base comme int et long.

Par contre, je me pose la question de la légalité d'une écriture comme
celle-ci :

string operator+ (string s, int i);

J'aurais intuitivement pensé que ce n'était pas autorisé, mais je
n'arrive pas à trouver des éléments à ce sujet dans le standard. Qu'en
est-il ?

--
Loïc

3 réponses

Avatar
Fabien LE LEZ
On Thu, 25 Aug 2005 19:18:55 +0200, Loïc Joly
:

Par contre, je me pose la question de la légalité d'une écriture comme
celle-ci :

string operator+ (string s, int i);


std::string n'est pas un type de base, donc il n'y a pas de problème.
Par contre, il y a des chances pour que l'utilisation de ce machin
soit contre-intuitive, voire pose des problèmes.
Mieux vaut passer par les ostringstream.

Avatar
kanze
Fabien LE LEZ wrote:
On Thu, 25 Aug 2005 19:18:55 +0200, Loïc Joly
:

Par contre, je me pose la question de la légalité d'une
écriture comme celle-ci :

string operator+ (string s, int i);


std::string n'est pas un type de base, donc il n'y a pas de
problème.


Ce n'est pas dit. Dans le contexte d'une récherche dépendante
dans un template, par exemple, le compilateur ne le trouverait
que s'il est dans le namespace std. Et formellement, on n'a pas
le droit d'introduire de nouvelles fonctions dans std (même s'il
fort probable que ça marche dans ce cas-ci).

Par contre, il y a des chances pour que l'utilisation de ce
machin soit contre-intuitive, voire pose des problèmes. Mieux
vaut passer par les ostringstream.


Tout à fait. Même sans le problème ci-dessus, c'est une mauvaise
idée.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Avatar
Fabien LE LEZ
On 26 Aug 2005 00:26:02 -0700, :

que s'il est dans le namespace std


D'un autre côté, je me suis peut-être avancé en parlant de std. Si ça
se trouve, l'OP a créé une classe "string". Très mauvaise idée,
certes, mais il était de toutes façons parti pour la déconne avec son
"operator+"...