40 votes

Que fait le code if (blah (), 5) {}?

Que fait le code suivant en C / C ++?

 if ( blah(), 5) {
 //do something
}
 

66voto

itsmatt Points 18905

L'opérateur virgule est appliqué et la valeur 5 est utilisée pour déterminer le vrai / faux de la condition.

Il va exécuter blah () et obtenir quelque chose en retour (vraisemblablement), puis l'opérateur virgule est employé et 5 sera la seule chose utilisée pour déterminer la valeur vrai / faux de l'expression.


Notez que l'opérateur, pourrait être surchargé pour le type de retour de la fonction blah () (qui n'était pas spécifié), rendant le résultat non évident.

45voto

jop Points 31978

Si l'opérateur de virgule n'est pas surchargé, le code ressemble à ceci:

 blah();
if (5) {
  // do something
}
 

Si l'opérateur de la virgule est surchargé, le résultat sera basé sur cette fonction.

 #include <iostream>
#include <string>

using namespace std;

string blah()
{
    return "blah";
}

bool operator,(const string& key, const int& val) {
    return false;
}

int main (int argc, char * const argv[]) {

    if (blah(), 5) {
        cout << "if block";
    } else {
        cout << "else block";
    }

    return 0;
}
 

(édité pour montrer le scénario de surcharge opérateur par virgule. Merci à David Pierre pour ses commentaires)

20voto

Arkadiy Points 10567

Je sais une chose que ce genre de code devrait faire: il devrait faire virer le codeur. J'aurais un peu peur de travailler à côté de quelqu'un qui écrit comme ça.

13voto

Eclipse Points 27662

Dans le cas pathologique, cela dépend de ce que fait l'opérateur virgule ...

 class PlaceHolder
{
};

PlaceHolder Blah() { return PlaceHolder(); }

bool operator,(PlaceHolder, int) { return false; }

if (Blah(), 5)
{
    cout << "This will never run.";
}
 

1voto

Ben Hoffstein Points 44398

Je dirais que cela dépend de blah ().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X