Posté le 06/05/2015 à 16:54 Membre depuis le 18/06/2001, -26239 message
yop,

Depuis que Scott Meyers a dit que les listes d'initialisation c'était bien, j'initialise scrupuleusement tous les membres de mes objets dans la liste.
Aujourd'hui, on a 3 possiblités
- initialisation par liste
- initialisation dans le corps du constructeur
- initialisation dans la déclaration de la classe (C++11 pawa)

Pour initialiser les objets dont on dérive, on a pas d'autre choix que la liste d'initialisation.
Maitenant, je voulais savoir si les autres manières d'initialiser les membres tenaient :
- de l'efficacité du code
- des circonstances du moment
- du bon vouloir du codeur
- de la dernière mode de la Fashion Week
- ...

Perso, je n'y vois rien de plus propre ou de plus sale, rien de plus pratique ou pénible, donc je me demandais si je ratais quelque chose d'important qui puisse m'aider un jour ou l'autre.
Merci d'avance happy
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 07/05/2015 à 00:49 Membre depuis le 10/06/2001, 40014 messages
Il y a des restrictions sur ce qu'une liste d'initialisation peut faire. Notamment, tu ne peux pas y mettre des instructions, seulement une expression.
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 07/05/2015 à 02:09 Membre depuis le 10/06/2001, 44321 messages
Les listes d'initialisations sont censées être faites dans l'ordre de déclaration, sont obligatoires pour les membres const, et pour l'instant c'est tout ce qui me vient en tête.
Posté le 07/05/2015 à 06:30 Membre depuis le 18/06/2001, -26239 message
Bon, pas le temps de lire à cette heure-ci,mais un article ici qui a l'air de faire le tour de la question :http://www.informit.com/articles/article.aspx?p=1852519
J'ai aussi survolé quelques pages stackoverflow avec la tête dans le pâté du matin, j'ai cru lire que l'initialisation de membres constants est possibles dans la déclaration de la classe en C++>11.
A potasser ce soir, merci bien happy
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 07/05/2015 à 11:14 Membre depuis le 10/06/2001, 44321 messages
Folco (./4) :
possibles dans la déclaration de la classe en C++>11.
Sans doute, oui, le contraire serait débile.
C'est une bonne chose en tout cas d'avoir cette fonctionnalité. Encore quinze ans et on arrivera au niveau de JAVA 1 trioui
Posté le 08/05/2015 à 00:47 Membre depuis le 10/06/2001, 40014 messages
Pfff, même dans 15 ans, cette pourriture de Java ne gèrera toujours pas des fonctionnalités banales comme la surcharge des opérateurs. tongue
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 08/05/2015 à 09:41 Membre depuis le 18/06/2001, -26239 message
Ah tiens, c'est C++>=11 en fait.
La page dont j'ai mis le lien est vraiment riche sur la question. happy
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 08/05/2015 à 14:25 Membre depuis le 10/06/2001, 44321 messages
J'espère bien que non ! grin
Posté le 14/05/2015 à 13:04 Membre depuis le 18/06/2001, -26239 message
Y a-t-il un intérêt à ne pas déclarer virtual les méthodes d'une classe ? Si la virtualité n'est pas utilisée, ça sera optimisé par le compilateur, non ? En fait, je ne comprends pas trop l'intérêt d'une méthode non virtuelle, à part l'interdiction explicite de la surdéfinition.
Je suis preneur de vos éclairages sur la question. chinois
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 14/05/2015 à 13:50 Membre depuis le 10/06/2001, 40014 messages
Folco (./9) :
Si la virtualité n'est pas utilisée, ça sera optimisé par le compilateur, non ?

Non, la dévirtualisation n'est pas possible si on ne connaît pas l'intégralité du programme, y compris toutes les bibliothèques linkées.
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 14/05/2015 à 13:55 Membre depuis le 18/06/2001, -26239 message
Ah, merci.
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 27/05/2015 à 21:44 Membre depuis le 18/06/2001, -26239 message
Toujours dans les questions un peu théoriques, vous vous y retrouvez, vous, dans la STL ? Avec::ses::deux::-:tongueoints:tongueartout, on sait plus à quel niveau on est rendu, et faut connaitre 2435243 par coeur pour s'y retrouver ?
On s'y fait vraiment, rapidement, et c'est efficace, ou mieux vaut que je me cantonne à Qt, qui offre les mêmes fonctionnalités ?

En fait, je me pose la question, parce que pour un autre projet, je n'ai pas _besoin_ de Qt, mais Qt offre des fonctionnalités beaucoup plus simples, voire plus puissantes, plus claires et moins bordéliques que ce que j'apperçois au premier abord dans la STL ^^

Merci pour vos retours. Et si c'est trop bordélique, pouf poubelle grin
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 28/05/2015 à 00:28 Membre depuis le 10/06/2001, 40014 messages
Personnellement, j'ai horreur de la STL et j'utilise toujours Qt quand j'ai le choix, même si ce n'est que pour QtCore.
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 28/05/2015 à 01:33 Membre depuis le 10/06/2001, 44321 messages
Folco (./12) :
On s'y fait vraiment
Non.
Folco (./12) :
rapidement
Encore moins.
Folco (./12) :
c'est efficace
Bof, non, et c'est tellement chiant à écrire... sick
Folco (./12) :
mieux vaut que je me cantonne à Qt
Oué.
Folco (./12) :
Qt offre des fonctionnalités beaucoup plus simples, voire plus puissantes, plus claires et moins bordéliques que ce que j'apperçois au premier abord dans la STL ^^
Voilà, oui, même au second abord. D'ailleurs l'api ressemble étrangement à celle du java cheeky


La STL, il y a sans doute une sorte d'élégance de conception dans les templates, mais en pratique... poubelle direct!© roll
Bref, Qt et/ou boost ou tout ce que tu veux, mais si tu peux évite la STL.
Posté le 28/05/2015 à 01:45 Membre depuis le 10/06/2001, 40014 messages
Euh, Boost est en gros une surcouche expérimentale de la STL, c'est la même chose en pire!
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 28/05/2015 à 02:00 Membre depuis le 10/06/2001, 44321 messages
Mmmm ? Jamais trop utilisé mais il me semble que ça offre bien plus de fonctionnalités que la stl.
Mais certes, même vu de loin, je conseillerais aussi Qt.
Posté le 28/05/2015 à 03:41 Membre depuis le 10/06/2001, 40014 messages
Ça offre effectivement beaucoup de fonctionnalités (en gros, tout ce que quelqu'un veut rajouter à la STL), mais au mieux codé en le même style que la STL, et au pire un abus total de templates. Le style de Boost est de faire vraiment tout avec des templates.
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 28/05/2015 à 03:57 Membre depuis le 10/06/2001, 44321 messages
Oui je sais que la majorité est d'ailleurs dans les h, mais si au moins niveau fonctionnalité c'est moins pourri, c'est déjà ça grin
Disons que STL <<< Boost < Qt hehe
Posté le 28/05/2015 à 06:13 Membre depuis le 18/06/2001, -26239 message
Ok, merci. Bon, ça me conforte, j'ai beau aimer les choses faites comme elles doivent l'être, bien dans les normes et tout, j'ai presque vomi quand j'ai réattaqué la STL, ça fait peur.
Donc Qt Core, en effet, pour les containeurs, les strings (avec des vraies chaines vides ou nulles \o/), les fichiers et streams, et en plus comme je suis dedans depuis des mois, je suis déjà à l'aise.

Merci pour vos retours. smile
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 28/05/2015 à 21:33 Membre depuis le 18/06/2001, -26239 message
Bon, je me suis lancé. Un détail, il faut passer un coup de moc sur les fichiers qui utilisent des classes dérivant de QObject (genre QFile), mais dont on utilise pas les signaux/slots ?

Merci bien.

edit -> Quand je fais /usr/lib/x86_64-linux-gnu/qt5/bin/moc truc.hpp -o Level.cpp.moc, il me répond truc.hpp:0: Note: No relevant classes found. No output generated.
Pourtant, j'inclus QFile, qui dérive de [...] QObject. Comment cela se fesse-t-il ?
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 29/05/2015 à 00:01 Membre depuis le 10/06/2001, 8784 messages
Folco (./9) :
Y a-t-il un intérêt à ne pas déclarer virtual les méthodes d'une classe ? Si la virtualité n'est pas utilisée, ça sera optimisé par le compilateur, non ? En fait, je ne comprends pas trop l'intérêt d'une méthode non virtuelle, à part l'interdiction explicite de la surdéfinition.
Je suis preneur de vos éclairages sur la question. chinois
La "dévirtualisation" ça se fait très bien en Java, mais c'est parce que c'est un compilateur JIT qui peut faire cette optimisation à la volée lors du chargement du code, ce qui n'est pas vraiment réalisable en C++. C'est d'ailleurs particulièrement important en Java puisse que les méthodes sont virtuelles par défaut.
Folco (./20) :
Bon, je me suis lancé. Un détail, il faut passer un coup de moc sur les fichiers qui utilisent des classes dérivant de QObject (genre QFile), mais dont on utilise pas les signaux/slots ?
D'après mes souvenir si tu n'utilise pas les fonctionnalités folkloriques de Qt comme les signaux ou l'introspection, tu peux en effet te passer de moc.
avatar
Posté le 29/05/2015 à 01:36 Membre depuis le 10/06/2001, 40014 messages
Si tes fichiers ne font qu'utiliser des classes dérivant de QObject, ça ne nécessite pas moc, seulement s'ils définissent des classes dérivant de QObject.
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 29/05/2015 à 06:17 Membre depuis le 18/06/2001, -26239 message
Ok, merci. Pour bien comprendre, pouruoi est-ce le cas ? Les headers de Qt ont déjà reçu une passe de moc, donc tout le code à générer est déjà là j'imagine ?

Uther -> je me demandais pourquoi un compilateur n'était pas capable de se rendre compte qu'une méthode n'était jamais appelée sous une forme surdéfinie dans une classe dérivée.
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 29/05/2015 à 13:33 Membre depuis le 10/06/2001, 40014 messages
Folco (./23) :
Ok, merci. Pour bien comprendre, pouruoi est-ce le cas ? Les headers de Qt ont déjà reçu une passe de moc, donc tout le code à générer est déjà là j'imagine ?

Oui. oui
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 27/07/2015 à 21:56 Membre depuis le 18/06/2001, -26239 message
Pour rester dans les questions de classe...
Si j'ai :
- une classe A, avec un destructeur virtuel
- une classe B, qui dérive de A
- un objet O instance de B

Si j'ai un pointeur A* pointant sur un objet de type B (polymorphisme), et que je fais un delete A;, que se passe-t-il ?
Ai-je un objet B qui a perdu sa partie A, ou un mécanisme quelconque aura détruit l'ensemble de l'objet ?

Je sais pas pourquoi j'ai l'impression que la réponse est assez évidente, mais ça ne me saute pas aux yeux, donc je dois passer à côté de quelque chose de gros ... ><

Merci d'avance. smile
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 28/07/2015 à 01:30 Membre depuis le 10/06/2001, 44321 messages
Le destructeur virtuel fait que c'est le bon qui est appelé (celui de B en l'occurrence).
Posté le 28/07/2015 à 03:59 Membre depuis le 10/06/2001, 40014 messages
Je confirme, c'est exactement pour ça qu'il faut que le destructeur soit virtuel dans ce cas. (D'ailleurs, g++ gueule si ton destructeur n'est pas virtuel dans une classe avec des méthodes virtuelles.) Si tu essaies de faire ça avec un destructeur non-virtuel, ça va effectivement foirer. (Au mieux, ça détruirait seulement la partie A.)
avatarMes news pour calculatrices TI: Ti-Gen (fr/en), MobiFiles (de)
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité
Posté le 28/07/2015 à 06:17 Membre depuis le 18/06/2001, -26239 message
Ok, merci beaucoup ! smile
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 27/12/2015 à 17:22 Membre depuis le 18/06/2001, -26239 message
RECYCLAGE !!! C'est à la mode en plus. Puis en Vendée, on est champions pour ça en plus ! \o/

Non en fait, c'est pour éprouver les skill de Zerosquare, et tenter d'enduire d'erreur son moteur d'indexation embarrassed


Bon, question bête, j'ai ça dans mon répertoire /usr/lib sous nux :
folco@Weygand:/usr/lib/x86_64-linux-gnu$ ls libSDL2.*
libSDL2.a  libSDL2.so
Alors question bête : quand je linke avec -lSDL2, ça linke statiquement ou dynamiquement ?

==== SPURIOUS INTERRUPT ====> Mon canard bleu a encore frappé, google et StackOverflow aussi : -Bstatic et -Bdynamic, -Bdynamic semblant être le défaut sur les plateformes qui le supportent.

Merci ! top
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !
Posté le 27/12/2015 à 17:32 Membre depuis le 27/04/2006, 59488 messages
Folco (./29) :
Non en fait, c'est pour éprouver les skill de Zerosquare, et tenter d'enduire d'erreur son moteur d'indexation embarrassed
C'est pas gentil, d'autant plus que t'es bien content de t'en servir parfois, de mon moteur d'indexation embarrassed
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo