Benoit Dejean writes:
C'est en fait un héritage (aggravé) de C.
je ne compte plus les « ugly » dans mes lectures... merci pour ta très
On pourait faire un passage en force en interdisant les déclarations de
fonctions dans une portée locale, maie cela casserait du code et ne
ressoudrait pas le problème -- imagine ce qui se passe dans la portée
globale.
Benoit Dejean <bnet@ifrance.com> writes:
C'est en fait un héritage (aggravé) de C.
je ne compte plus les « ugly » dans mes lectures... merci pour ta très
On pourait faire un passage en force en interdisant les déclarations de
fonctions dans une portée locale, maie cela casserait du code et ne
ressoudrait pas le problème -- imagine ce qui se passe dans la portée
globale.
Benoit Dejean writes:
C'est en fait un héritage (aggravé) de C.
je ne compte plus les « ugly » dans mes lectures... merci pour ta très
On pourait faire un passage en force en interdisant les déclarations de
fonctions dans une portée locale, maie cela casserait du code et ne
ressoudrait pas le problème -- imagine ce qui se passe dans la portée
globale.
Benoit Dejean writes:
complètement.
En réalité, on fait encore mieux.
Condisère
struct T { /* ... */ };
struct A {
explicit A(bool);
operator void*();
};
bool has_feature(T);
int main()
{
if (A a = has_feature(T())); // #1
// ...
}
la ligne #1 est une erreur parce que le constructeur de A qui accepte un
bool ext explicit. La syntaxe
if (A a(has_feature(T())))
n'est pas permise. Et même si elle etait permise, elle ne ferait pas
la bonne chose. Par contre, la nouvelle syntaxe que nous proposons
permet d'écrire cela comme
if (A a = { has_feature(T()) })
Benoit Dejean <bnet@ifrance.com> writes:
complètement.
En réalité, on fait encore mieux.
Condisère
struct T { /* ... */ };
struct A {
explicit A(bool);
operator void*();
};
bool has_feature(T);
int main()
{
if (A a = has_feature(T())); // #1
// ...
}
la ligne #1 est une erreur parce que le constructeur de A qui accepte un
bool ext explicit. La syntaxe
if (A a(has_feature(T())))
n'est pas permise. Et même si elle etait permise, elle ne ferait pas
la bonne chose. Par contre, la nouvelle syntaxe que nous proposons
permet d'écrire cela comme
if (A a = { has_feature(T()) })
Benoit Dejean writes:
complètement.
En réalité, on fait encore mieux.
Condisère
struct T { /* ... */ };
struct A {
explicit A(bool);
operator void*();
};
bool has_feature(T);
int main()
{
if (A a = has_feature(T())); // #1
// ...
}
la ligne #1 est une erreur parce que le constructeur de A qui accepte un
bool ext explicit. La syntaxe
if (A a(has_feature(T())))
n'est pas permise. Et même si elle etait permise, elle ne ferait pas
la bonne chose. Par contre, la nouvelle syntaxe que nous proposons
permet d'écrire cela comme
if (A a = { has_feature(T()) })
Benoit Dejean writes:
|
| intéressant, je ne savais qu'en présence d'explicit,
l'initialisation | avec = n'avait pas le même sens. voir plus #1
C'est le sens même d'explicit :-)
| Tout ça est très bien. Est-ce que vous avez la volonté d'apporter
cette | nouveauté pour résoudre ce genre de problème (toujours ne
plus de la | facilité d'écriture) ou bien vous aimeriez la
généraliser pour un | emploi très courant ?
hmm, là je ne comprends pas très bien ce que tu veux dire. Nous
proposons que A a = { e } soit équivalent à une direct initialization.
Et cela couvre le cas que j'ai mentionné.
| ne devrait pas être résolue comme la construction par défaut, suivi
| de l'affectation ?
Non. Cela a toujours voulu dire une copy-initialization et cela le
restera.
| j'ai peur de ne pas bien comprendre le sens l'initialisation avec =.
Si | ton exemple ne fonctionne pas, c'est bien que ce n'est pas
équivalent à | l'appel parenthésé au constructeur ... mais au fil
que j'écris je | commence à comprendre. L'initialisation avec = n'est
correcte que si la | partie droite est de type Foo, quitte à être
converti implicitement pour | y arriver. c'est à peu près cela ?
L'écriture
Foo b = 3 ; // #1
est une copy-initialization, à contraster avec
Foo b(3); // #2
qui est une direct-initailization.
Dans une initialisation par copie, on commence d'abord par convertir
l'expression d'initialisation en un Foo en appelant un constructeur de
conversion. Cela va créer un temporaire, et ce temporaire est utilisé
pour initialiser b en appelant le constructeur de copie. S'il n'existe
aucun constructeur de conversion (comme c'est le cas ici) accessible,
alors l'initialisation échoue. Si le constructeur par copie échoue
alors l'initialisation échoue.
L'initialisation directe ne requiert pas un constructeur de copie. Il
lui faut juste un bon constructeur (pas nécessairement de conversion).
Note que, dans le cas d'initialisation par copie, beaucoup de
compilateurs n'appellent pas le constructeur de copie -- ils se
contentent juste de vérifier qu'il est accessible -- et initialisent
directement. C'est permis.
Benoit Dejean <bnet@ifrance.com> writes:
|
| intéressant, je ne savais qu'en présence d'explicit,
l'initialisation | avec = n'avait pas le même sens. voir plus #1
C'est le sens même d'explicit :-)
| Tout ça est très bien. Est-ce que vous avez la volonté d'apporter
cette | nouveauté pour résoudre ce genre de problème (toujours ne
plus de la | facilité d'écriture) ou bien vous aimeriez la
généraliser pour un | emploi très courant ?
hmm, là je ne comprends pas très bien ce que tu veux dire. Nous
proposons que A a = { e } soit équivalent à une direct initialization.
Et cela couvre le cas que j'ai mentionné.
| ne devrait pas être résolue comme la construction par défaut, suivi
| de l'affectation ?
Non. Cela a toujours voulu dire une copy-initialization et cela le
restera.
| j'ai peur de ne pas bien comprendre le sens l'initialisation avec =.
Si | ton exemple ne fonctionne pas, c'est bien que ce n'est pas
équivalent à | l'appel parenthésé au constructeur ... mais au fil
que j'écris je | commence à comprendre. L'initialisation avec = n'est
correcte que si la | partie droite est de type Foo, quitte à être
converti implicitement pour | y arriver. c'est à peu près cela ?
L'écriture
Foo b = 3 ; // #1
est une copy-initialization, à contraster avec
Foo b(3); // #2
qui est une direct-initailization.
Dans une initialisation par copie, on commence d'abord par convertir
l'expression d'initialisation en un Foo en appelant un constructeur de
conversion. Cela va créer un temporaire, et ce temporaire est utilisé
pour initialiser b en appelant le constructeur de copie. S'il n'existe
aucun constructeur de conversion (comme c'est le cas ici) accessible,
alors l'initialisation échoue. Si le constructeur par copie échoue
alors l'initialisation échoue.
L'initialisation directe ne requiert pas un constructeur de copie. Il
lui faut juste un bon constructeur (pas nécessairement de conversion).
Note que, dans le cas d'initialisation par copie, beaucoup de
compilateurs n'appellent pas le constructeur de copie -- ils se
contentent juste de vérifier qu'il est accessible -- et initialisent
directement. C'est permis.
Benoit Dejean writes:
|
| intéressant, je ne savais qu'en présence d'explicit,
l'initialisation | avec = n'avait pas le même sens. voir plus #1
C'est le sens même d'explicit :-)
| Tout ça est très bien. Est-ce que vous avez la volonté d'apporter
cette | nouveauté pour résoudre ce genre de problème (toujours ne
plus de la | facilité d'écriture) ou bien vous aimeriez la
généraliser pour un | emploi très courant ?
hmm, là je ne comprends pas très bien ce que tu veux dire. Nous
proposons que A a = { e } soit équivalent à une direct initialization.
Et cela couvre le cas que j'ai mentionné.
| ne devrait pas être résolue comme la construction par défaut, suivi
| de l'affectation ?
Non. Cela a toujours voulu dire une copy-initialization et cela le
restera.
| j'ai peur de ne pas bien comprendre le sens l'initialisation avec =.
Si | ton exemple ne fonctionne pas, c'est bien que ce n'est pas
équivalent à | l'appel parenthésé au constructeur ... mais au fil
que j'écris je | commence à comprendre. L'initialisation avec = n'est
correcte que si la | partie droite est de type Foo, quitte à être
converti implicitement pour | y arriver. c'est à peu près cela ?
L'écriture
Foo b = 3 ; // #1
est une copy-initialization, à contraster avec
Foo b(3); // #2
qui est une direct-initailization.
Dans une initialisation par copie, on commence d'abord par convertir
l'expression d'initialisation en un Foo en appelant un constructeur de
conversion. Cela va créer un temporaire, et ce temporaire est utilisé
pour initialiser b en appelant le constructeur de copie. S'il n'existe
aucun constructeur de conversion (comme c'est le cas ici) accessible,
alors l'initialisation échoue. Si le constructeur par copie échoue
alors l'initialisation échoue.
L'initialisation directe ne requiert pas un constructeur de copie. Il
lui faut juste un bon constructeur (pas nécessairement de conversion).
Note que, dans le cas d'initialisation par copie, beaucoup de
compilateurs n'appellent pas le constructeur de copie -- ils se
contentent juste de vérifier qu'il est accessible -- et initialisent
directement. C'est permis.
bonjour, je lis (et essaye de comprendre) très modestement certains
documents disponibles ici
http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/#pre_kona
bonjour, je lis (et essaye de comprendre) très modestement certains
documents disponibles ici
http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/#pre_kona
bonjour, je lis (et essaye de comprendre) très modestement certains
documents disponibles ici
http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/#pre_kona
En ce qui concerne les références croisées, BS et moi sommes
convaincus que le langage ne doit pas être une somme de
fonctionnalités ; au contraire, ces dernières doivent tisser des liens
étroits entre elles pour faire quelque chose de cohérent et de solide.
Alors, à chaque fois, nous attachons une attention particulière aux
intéractions entre différentes propositions/suggestions. BS appelle
cela « language design » par opposition à « feature design ».
Regarde, par exemple, comment il lie la suggestion ES053 aux generalized
initializers dans la proposition pour user-defined literals.
Si nous avions les « concepts », il est probable que nous aurions
amérioré nombre de propositions y compris (et surtout) celles
concernant la bibliothèque. Mais nous avons eu quelque difficultés à
finir le papier à temps pour la deadline. Il sera sans doute dans la
mailing post-Kona.
Si tu veux avoir une idée des suggestions/propositions communiquées à
l'EWG, tu peux consulter
http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1512.html
En ce qui concerne les références croisées, BS et moi sommes
convaincus que le langage ne doit pas être une somme de
fonctionnalités ; au contraire, ces dernières doivent tisser des liens
étroits entre elles pour faire quelque chose de cohérent et de solide.
Alors, à chaque fois, nous attachons une attention particulière aux
intéractions entre différentes propositions/suggestions. BS appelle
cela « language design » par opposition à « feature design ».
Regarde, par exemple, comment il lie la suggestion ES053 aux generalized
initializers dans la proposition pour user-defined literals.
Si nous avions les « concepts », il est probable que nous aurions
amérioré nombre de propositions y compris (et surtout) celles
concernant la bibliothèque. Mais nous avons eu quelque difficultés à
finir le papier à temps pour la deadline. Il sera sans doute dans la
mailing post-Kona.
Si tu veux avoir une idée des suggestions/propositions communiquées à
l'EWG, tu peux consulter
http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1512.html
En ce qui concerne les références croisées, BS et moi sommes
convaincus que le langage ne doit pas être une somme de
fonctionnalités ; au contraire, ces dernières doivent tisser des liens
étroits entre elles pour faire quelque chose de cohérent et de solide.
Alors, à chaque fois, nous attachons une attention particulière aux
intéractions entre différentes propositions/suggestions. BS appelle
cela « language design » par opposition à « feature design ».
Regarde, par exemple, comment il lie la suggestion ES053 aux generalized
initializers dans la proposition pour user-defined literals.
Si nous avions les « concepts », il est probable que nous aurions
amérioré nombre de propositions y compris (et surtout) celles
concernant la bibliothèque. Mais nous avons eu quelque difficultés à
finir le papier à temps pour la deadline. Il sera sans doute dans la
mailing post-Kona.
Si tu veux avoir une idée des suggestions/propositions communiquées à
l'EWG, tu peux consulter
http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1512.html