En regardant le x86-64asm generated by GCC 7.1 pour le code suivant, j'ai trouvé que les constructeurs pour a
génèrent du code tandis que b
n'a pas de label pour un constructeur. Pourquoi le code généré ici pour les constructeurs serait-il si différent? Pourquoi ne pas a() { }
générer le même code que b() = default
?Pourquoi le constructeur par défaut et vide génère-t-il un code machine différent en C++?
0
A
Répondre
5
Sans optimisation (-O0), gcc génère du code qui peut être facilement débogué, de sorte qu'il inclut tous les appels d'instructions et de fonctions dans la source. Vous pouvez définir un point d'arrêt sur a :: a. Avec tout niveau d'optimisation supérieur, vous ne verrez pas cet appel de constructeur.
Un code différent tel que? – EJP
@EJP, il a montré le code en godbolt dans le lien. – prl
Compilez-vous avec ou sans optimisation? Si sans (par exemple '-O0') ce serait la raison. – Peter