[nosmile]>Nitro:
>les méthodes écrites dans les déclarations de classes sont automatiquement inline,
Si on indique ce fait par un mot ou par la position de la fonction ne change absolument rien.
>et justement inline est standard en C++ (et pas en C)...
inline est une extension documentée de GCC
>le fait d'utiliser des classes est strictement équivalent à utiliser des fonctions C normales avec un pointeur que tu passes en parametre pour la structure de l'objet.
- Déjà, on passe un paramètre de plus, souvent inutilement (on peut souvent s'arranger autrement si on n'utilise pas les classes).
- As-tu regardé avec un débogueur tout ce qu'il y a dans une classe qu'il n'y a pas dans une structure? Jette un coup d'œil sur les captures d'écran de
KDB, on peut le voir là-dessus. C'est un gaspillage de place énorme.
>Le seul truc qui peut etre consideré comme lent en C++ c'est les mauvaises implementations de la gestion d'erreurs (try/catch) et les méthodes virtuelles qui créent une vtable et rajoutent un pointeur dans la structure de l'objet,
Ça suffit déjà largement pour dire que c'est inefficace.
>mais là on ne peut pas parler de lourdeur vu que c'est vraiment minimal comme overhead.
Pas vraiment, parce que tu as oublié:
- l'inefficacité en mémoire des classes (cf. ci-dessus)
- l'inefficacité du surchargement des opérateurs, surtout de
l'abus du surchargement des opérateurs. Par exemple:
cout << "toto = " << toto << endl << "foo = " << foo << endl << "bar = " << bar << endl;
Je compte 9 appels de fonction utilisant 4 références à des objets, avec l'utilisation de 2 objets différents, alors qu'on peut avoir la même chose avec un seul appel de fonction et sans aucun objet:
printf("toto = %d\nfoo = %ld\nbar = %s\n",toto,foo,bar);
- le fait de regrouper plusieurs fonctions dans une seule classe, ce qui fait que toute la classe devra être linkée quand on n'a besoin que d'une seule fonction. Par exemple, ci-dessus, le fait d'avoir linké
ostream:
perator<< (en plusieurs variantes en plus - 4 différentes en admettant les mêmes types de données que dans mon
printf) fera que
toute la classe sera incluse lors d'un linkage statique, y compris par exemple des fonctions de type
ostream:
perator<<(float) voire même des fonctions encore plus obscures. En C, on linke seulement
printf.
[edit]Edité par Kevin Kofler le 03-01-2002 à 21:53:09[/edit]