Que se passe-t-il lorsque vous faites d'une classe membre une fonction d'un ami ?!Rendre un membre fonctionnel est un ami
Le code ci-dessous compile et s'exécute. Sans la déclaration d'un ami, un «trop d'arguments à l'opérateur» est généré (et à juste titre). Je me rends compte que faire cela n'a aucun sens, mais quelqu'un peut-il me dire ce qui se passe ici? L'ami force-t-il le compilateur à omettre le paramètre par défaut de ce paramètre?
class Test
{
public:
friend bool operator<(Test& lhs, Test& rhs)
{
return true;
}
};
int main(int c, char** argv)
{
Test test1;
Test test2;
return test1 < test2;
}
Pour répondre à votre question: Les amis ne peuvent pas être membres de la classe d'amitié en C++ 03, mais cela est autorisé en C++ 0x. –
Je suis curieux, quel point pourrait-il y avoir de permettre à une fonction membre d'être une amie, puisqu'elle a déjà un accès complet? – radman
Voir http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#77 ou l'historique (ce cas particulier n'a pas beaucoup d'importance, car les classes imbriquées ont un accès complet au classe d'imbrication dans C++ 0x et la plupart des compilateurs C++ 03 de toute façon). –