OVH Cloud OVH Cloud

Ordre d'appel des constructeurs

2 réponses
Avatar
JBB
Bonjour à tous,

J'ai une classe du genre:
class A
{
A(T1 var);

const T2 _var1;
const T3 _var2;
}

A::A(T1 var):
_var1(_var),
_var2(_var1)
{}

Est il sur que le constructeur de _var1 est appellé après celui de _var2 ?
C'est dans la norme? ca depend des compilateurs?

Merci

2 réponses

Avatar
Marc Boyer
Le 23-02-2006, JBB a écrit :
Bonjour à tous,

J'ai une classe du genre:
class A
{
A(T1 var);

const T2 _var1;
const T3 _var2;
}

A::A(T1 var):
_var1(_var),
_var2(_var1)
{}

Est il sur que le constructeur de _var1 est appellé après celui de _var2 ?
C'est dans la norme?


La norme implique que les constructeurs sont appellés
dans l'ordre de déclaration des membres dans le source.

ca depend des compilateurs?


Le respect de la norme est toujours une grande question...
Pour GCC, ça se passe bien.

Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exiter des sots
IF -- Rudyard Kipling

Avatar
Fabien LE LEZ
On Thu, 23 Feb 2006 14:40:38 +0100, JBB :

const T2 _var1;
const T3 _var2;
}

A::A(T1 var):
_var1(_var),
_var2(_var1)
{}

Est il sur que le constructeur de _var1 est appellé après celui de _var2 ?


La norme l'impose, et dans ce cas précis, ça m'étonnerait beaucoup
qu'un compilateur ne respecte pas la norme. Et si jamais c'était le
cas, change de compilo.

Attention, le constructeur de "_var1" est également appelé avant celui
de "_var2" dans le code suivant, et certains compilos omettent
d'afficher un warning :

A::A(T1 var):
_var2(_var),
_var1(_var)
{}