Ce code conduit à un comportement non défini:Les goto et les destructeurs sont-ils compatibles?
void some_func() {
goto undefined;
{
T x = T();
undefined:
}
}
Le constructeur n'est pas appelé.
Mais qu'en est-il de ce code? Le destructeur de x sera-t-il appelé? Je pense que ce sera, mais je veux être sûr. :)
void some_func() {
{
T x = T();
goto out;
}
out:
}
Le premier exemple de code ne conduit pas à un comportement indéfini, il est illégal et ne sera pas compilé. –
"ne compilera pas" est un exemple de comportement indéfini, je pense. Le livre que je suis en train de lire dit "comportement indéfini". –
Les deux sont techniquement différents: si le compilateur doit rejeter le programme, c'est "moins mauvais" du point de vue du programmeur que quelque chose qui pourrait compiler et mettre sa maison en feu quand il s'exécute. Certains compilateurs rejettent des choses qui sont légales mais que ce compilateur sait être indéfinies. –