1

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

2

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.
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

3

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.

4

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

5

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

6

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
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

7

Ah tiens, c'est C++>=11 en fait.
La page dont j'ai mis le lien est vraiment riche sur la question. happy

8

J'espère bien que non ! grin

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

10

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.
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

11

Ah, merci.

12

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

13

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.
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

14

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.

15

Euh, Boost est en gros une surcouche expérimentale de la STL, c'est la même chose en pire!
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

16

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.

17

Ç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.
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

18

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

19

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

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 ?

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 ?

21

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

22

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.
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

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 ?

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.

24

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
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

25

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

26

Le destructeur virtuel fait que c'est le bon qui est appelé (celui de B en l'occurrence).

27

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.)
avatar
Mes news pour calculatrices TI: Ti-Gen
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é

28

Ok, merci beaucoup ! smile

29

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

30

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
avatar
Zeroblog

« 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