Bonjour tous.
Je me pose une question existentielle très bête. Comment faire pour surcharger correctement l'opérateur &&. Par correctement, j'entends que dans l'opération a && b, b ne sera évalué que si a.
J'ai bien tenté d'écrire :
mais voila, ce qui me gène c'est que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 class A { public: int x; A() { x = 0; std::cout << "création A" << std::endl; }; operator bool() { return x != 0; } A operator&&(const A& other) { if(!x) return *this; A result; result.x = x && other.x; return result; }; };
A() est tout de même appelé, alors que si je fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 A a; a.x = 0; A b; bool c = a && A(); // ligne qui me pose un problème return 0;
A() n'est plus appelé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 A a; a.x = 0; A b; bool c = (bool)a && A(); // ligne qui me pose problème return 0;
Existe-t-il un moyen d'écrire la surcharge de l'opérateur && afin de garder le comportement standard du langage (ne pas évaluer l'opérande droite s'il n'y en a pas besoin) ?
Partager