[Question existentielle] Surcharge de l'opérateur &&
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 :
Code:
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;
};
}; |
mais voila, ce qui me gène c'est que :
Code:
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() est tout de même appelé, alors que si je fais :
Code:
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; |
A() n'est plus appelé.
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) ?