2017-09-24 6 views
0

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

Un code différent tel que? – EJP

+0

@EJP, il a montré le code en godbolt dans le lien. – prl

+2

Compilez-vous avec ou sans optimisation? Si sans (par exemple '-O0') ce serait la raison. – Peter

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.