C'est §1.3.3, non §1.3.8.
C'est §1.3.3, non §1.3.8.
C'est §1.3.3, non §1.3.8.
drkm wrote:Mais si je comprend bien, il faut lire le schéma comme « Les types
"object" et "class" pointent chacun vers un objet de type "vtbl",
éventuellement différent.
euh non. Il pointe vers la meme vtbl.
Avec,
j'imagine, dans ce dernier cas, l'absence de transtypage implicite en
OOPC vers une classe de base, et donc de calcul de déplacement, cela
devant être demandé explicitement par l'utilisateur.
oui et non.
si tu veux un transtypage efficace, tu dois le demander a l'utilisateur.
sinon il peut etre dynamique mais c'est alors aussi 'lent' qu'un
dynamic_cast. Pour le down-cast c'est pas tres utile, mais pour le
up-cast c'est indispensable.
drkm wrote:
Mais si je comprend bien, il faut lire le schéma comme « Les types
"object" et "class" pointent chacun vers un objet de type "vtbl",
éventuellement différent.
euh non. Il pointe vers la meme vtbl.
Avec,
j'imagine, dans ce dernier cas, l'absence de transtypage implicite en
OOPC vers une classe de base, et donc de calcul de déplacement, cela
devant être demandé explicitement par l'utilisateur.
oui et non.
si tu veux un transtypage efficace, tu dois le demander a l'utilisateur.
sinon il peut etre dynamique mais c'est alors aussi 'lent' qu'un
dynamic_cast. Pour le down-cast c'est pas tres utile, mais pour le
up-cast c'est indispensable.
drkm wrote:Mais si je comprend bien, il faut lire le schéma comme « Les types
"object" et "class" pointent chacun vers un objet de type "vtbl",
éventuellement différent.
euh non. Il pointe vers la meme vtbl.
Avec,
j'imagine, dans ce dernier cas, l'absence de transtypage implicite en
OOPC vers une classe de base, et donc de calcul de déplacement, cela
devant être demandé explicitement par l'utilisateur.
oui et non.
si tu veux un transtypage efficace, tu dois le demander a l'utilisateur.
sinon il peut etre dynamique mais c'est alors aussi 'lent' qu'un
dynamic_cast. Pour le down-cast c'est pas tres utile, mais pour le
up-cast c'est indispensable.
J'avais choqué sur l'utilisation « type effectif » faite par Laurent
-- « type effectif » est un terme C, et non C++, pour désigner quelque
chose de légèrement différent -- mais au fond, ce n'est pas si mal.
Si on sait de quoi on parle :-)
J'avais choqué sur l'utilisation « type effectif » faite par Laurent
-- « type effectif » est un terme C, et non C++, pour désigner quelque
chose de légèrement différent -- mais au fond, ce n'est pas si mal.
Si on sait de quoi on parle :-)
J'avais choqué sur l'utilisation « type effectif » faite par Laurent
-- « type effectif » est un terme C, et non C++, pour désigner quelque
chose de légèrement différent -- mais au fond, ce n'est pas si mal.
Si on sait de quoi on parle :-)
writes:
| Gabriel Dos Reis wrote in message
| news:...
| > drkm writes:
| > | Arnaud Meurgues writes:
| > | > Gabriel Dos Reis wrote:
| > | >> Un constructeur d'une classe de base construit le sous-objet
| > | >> de la classe de base, et non l'objet complet le plus
| > | >> dérivé. Et le type dynamique de ce sous-objet reste, tout au
| > | >> long de sa vie, le type statique vu par le constructeur. Il
| > | >> n'y a jamais de changement
| > | > Toute cette discussion me fait me poser une question.
| > | > Quel est le sens de "type statique" d'un objet ou de "type
| > | > dynamique" d'un objet ?
| > | > Un objet a toujours le même type. En revanche, on peut parler du
| > | > type statique d'une variable et du type dynamique d'une variable.
| > | Si je me souviens bien, la définition de type dynamique
| > | (1.3.8, je pense) se réfère au type le plus dérivé d'une
| > | *expression* lvalue. Dans le cas d'une rvalue, elle définit le
| > | type dynamique comme égal au type statique. Remarque la
| > | différence entre « this » et « * this ».
| > Exact.
| C'est §1.3.3, non §1.3.8.
Je n'avais pas vérifié le numéro.
| Et c'est plus compliqué que ça, parce que la « définnition » est
| complétée par d'autres clauses de la norme.
Si tu trouves que c'est compliqué, je ne vais pas systématiquement te
contredire ; pour moi, c'est simple :-)
| Ou plus exactement, la définition ici ne prend en compte que les
| objets « vivants », c-à-d dont la durée de vie (§3.8) a
| commencée. Or, la durée de vie ne commence qu'en sortie du
| constructeur (selon §3.8). Par ailleurs, §12.6 et §12.7 explique le
| comportement des objets pendant les constructeurs et les
| destructeurs, y compris le comportement des expressions lvalue qui
| désignent de tels objets. Formellement, je ne sais pas si on
| pourrait parler du « type dynamique de l'objet » dans ces cas-là,
| étant donné que formalement, il n'y a pas encore d'objet. Mais
| pratiquement, le *comportement* est celui d'un objet dont le type
| est celui du constructeur ou du destructeur en cours.
C'est pour cela qu'il faut revenir aux principes premiers -- comme
dirait le Père :-)
Ici, le principe premier est qu'à chaque étape de la construction d'un
objet (étape bien défini), il y a le type le plus dérivé dont le
constructeur ou destructeur en cours d'exécution détermine le
fonctionnement dynamique (ou type dynamique).
kanze@gabi-soft.fr writes:
| Gabriel Dos Reis <gdr@integrable-solutions.net> wrote in message
| news:<m3sm6s654d.fsf@uniton.integrable-solutions.net>...
| > drkm <usenet.fclcxx@fgeorges.org> writes:
| > | Arnaud Meurgues <arnaud@meurgues.non.fr.invalid> writes:
| > | > Gabriel Dos Reis wrote:
| > | >> Un constructeur d'une classe de base construit le sous-objet
| > | >> de la classe de base, et non l'objet complet le plus
| > | >> dérivé. Et le type dynamique de ce sous-objet reste, tout au
| > | >> long de sa vie, le type statique vu par le constructeur. Il
| > | >> n'y a jamais de changement
| > | > Toute cette discussion me fait me poser une question.
| > | > Quel est le sens de "type statique" d'un objet ou de "type
| > | > dynamique" d'un objet ?
| > | > Un objet a toujours le même type. En revanche, on peut parler du
| > | > type statique d'une variable et du type dynamique d'une variable.
| > | Si je me souviens bien, la définition de type dynamique
| > | (1.3.8, je pense) se réfère au type le plus dérivé d'une
| > | *expression* lvalue. Dans le cas d'une rvalue, elle définit le
| > | type dynamique comme égal au type statique. Remarque la
| > | différence entre « this » et « * this ».
| > Exact.
| C'est §1.3.3, non §1.3.8.
Je n'avais pas vérifié le numéro.
| Et c'est plus compliqué que ça, parce que la « définnition » est
| complétée par d'autres clauses de la norme.
Si tu trouves que c'est compliqué, je ne vais pas systématiquement te
contredire ; pour moi, c'est simple :-)
| Ou plus exactement, la définition ici ne prend en compte que les
| objets « vivants », c-à-d dont la durée de vie (§3.8) a
| commencée. Or, la durée de vie ne commence qu'en sortie du
| constructeur (selon §3.8). Par ailleurs, §12.6 et §12.7 explique le
| comportement des objets pendant les constructeurs et les
| destructeurs, y compris le comportement des expressions lvalue qui
| désignent de tels objets. Formellement, je ne sais pas si on
| pourrait parler du « type dynamique de l'objet » dans ces cas-là,
| étant donné que formalement, il n'y a pas encore d'objet. Mais
| pratiquement, le *comportement* est celui d'un objet dont le type
| est celui du constructeur ou du destructeur en cours.
C'est pour cela qu'il faut revenir aux principes premiers -- comme
dirait le Père :-)
Ici, le principe premier est qu'à chaque étape de la construction d'un
objet (étape bien défini), il y a le type le plus dérivé dont le
constructeur ou destructeur en cours d'exécution détermine le
fonctionnement dynamique (ou type dynamique).
writes:
| Gabriel Dos Reis wrote in message
| news:...
| > drkm writes:
| > | Arnaud Meurgues writes:
| > | > Gabriel Dos Reis wrote:
| > | >> Un constructeur d'une classe de base construit le sous-objet
| > | >> de la classe de base, et non l'objet complet le plus
| > | >> dérivé. Et le type dynamique de ce sous-objet reste, tout au
| > | >> long de sa vie, le type statique vu par le constructeur. Il
| > | >> n'y a jamais de changement
| > | > Toute cette discussion me fait me poser une question.
| > | > Quel est le sens de "type statique" d'un objet ou de "type
| > | > dynamique" d'un objet ?
| > | > Un objet a toujours le même type. En revanche, on peut parler du
| > | > type statique d'une variable et du type dynamique d'une variable.
| > | Si je me souviens bien, la définition de type dynamique
| > | (1.3.8, je pense) se réfère au type le plus dérivé d'une
| > | *expression* lvalue. Dans le cas d'une rvalue, elle définit le
| > | type dynamique comme égal au type statique. Remarque la
| > | différence entre « this » et « * this ».
| > Exact.
| C'est §1.3.3, non §1.3.8.
Je n'avais pas vérifié le numéro.
| Et c'est plus compliqué que ça, parce que la « définnition » est
| complétée par d'autres clauses de la norme.
Si tu trouves que c'est compliqué, je ne vais pas systématiquement te
contredire ; pour moi, c'est simple :-)
| Ou plus exactement, la définition ici ne prend en compte que les
| objets « vivants », c-à-d dont la durée de vie (§3.8) a
| commencée. Or, la durée de vie ne commence qu'en sortie du
| constructeur (selon §3.8). Par ailleurs, §12.6 et §12.7 explique le
| comportement des objets pendant les constructeurs et les
| destructeurs, y compris le comportement des expressions lvalue qui
| désignent de tels objets. Formellement, je ne sais pas si on
| pourrait parler du « type dynamique de l'objet » dans ces cas-là,
| étant donné que formalement, il n'y a pas encore d'objet. Mais
| pratiquement, le *comportement* est celui d'un objet dont le type
| est celui du constructeur ou du destructeur en cours.
C'est pour cela qu'il faut revenir aux principes premiers -- comme
dirait le Père :-)
Ici, le principe premier est qu'à chaque étape de la construction d'un
objet (étape bien défini), il y a le type le plus dérivé dont le
constructeur ou destructeur en cours d'exécution détermine le
fonctionnement dynamique (ou type dynamique).