Alors que la réponse de GMan est factuellement correcte, vous ne devriez jamais surcharger un opérateur de faire quelque chose d'inattendu - cela va à l'encontre de toutes les règles de programmation de bonnes pratiques. Lorsqu'un utilisateur lit un code, il s'attend à ce que les opérateurs se comportent d'une manière ou d'une autre, et les faire se comporter différemment n'est bon que pour les compétitions de codage obscurcissantes.
L'opérateur ()
en C++ peut être utilisé pour transformer un objet en une fonction. Cela a en fait un nom - il est appelé foncteur, et est largement utilisé dans la STL pour fournir des algorithmes génériques. Google pour stl functor pour en apprendre davantage sur un bon usage de la technique.
Ce n'est pas la seule utilisation courante de 'operator()'. Il est également utilisé pour enchaîner. 'boost :: program_options' montre un bon exemple avec son' options_description_easy_init :: operator()() '(mais le client ne gère que' options_description :: add_option() 'qui retourne le type chainable). Vous l'utilisez pour ajouter du support pour une option de ligne de commande après l'autre. Il est également courant d'utiliser 'operator <<' et 'operator >>' dans le même but. 'std :: cout' et' std :: cin' sont l'exemple classique ici. Le choix parmi ces trois est généralement un choix d'esthétique. – wilhelmtell
Alors que vous avez certainement raison sur les opérateurs en général (ne surchargez pas '+' pour faire le travail de '* ='), il me semble que 'operator()()' est une exception. Il est utilisé pour imiter une fonction et les fonctions sont utilisées pour faire n'importe quoi, donc il n'y a pas de limite conventionnelle à quoi 'operator()()' est habitué. Ca fait -1 de moi, malgré ton gentil avatar. ':)' – sbi