Compréhension d'un morceau de code
Résolu/Fermé
Utilisateur anonyme
-
Modifié par Whismeril le 17/12/2014 à 19:35
Utilisateur anonyme - 17 déc. 2014 à 23:26
Utilisateur anonyme - 17 déc. 2014 à 23:26
A voir également:
- Compréhension d'un morceau de code
- Code ascii de a - Guide
- Code puk bloqué - Guide
- Code de déverrouillage oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
3 réponses
ElementW
Messages postés
4814
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
17 déc. 2014 à 21:15
17 déc. 2014 à 21:15
'lut
La ligne devient donc
B b();En C++, ça porte a confusion je sais, mais quand on a un constructeur sans arguments, on ne met pas les parenthèses; sinon ça n'appelle pas le constructeur, comme c'est le cas ici.
La ligne devient donc
B b;, et le programme affiche ce à quoi tu t'attendais:
gravgun@garch:/tmp$ g++ aaa.cpp -o aaa gravgun@garch:/tmp$ ./aaa B fin
Utilisateur anonyme
17 déc. 2014 à 21:50
17 déc. 2014 à 21:50
Mais si ça n'appelle pas le constructeur implémenté, ça appelle quoi exactement ?
ElementW
Messages postés
4814
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
Modifié par gravgun le 17/12/2014 à 23:12
Modifié par gravgun le 17/12/2014 à 23:12
Rien. En fait, la déclaration sans paramètre mais avec parenthèses reviendrait en quelque sorte à
B b(void);en C: C++ considère donc ça comme une déclaration de fonction vu que ce qui est entre parenthèses est un (ou des) types, et non des variables (ou constantes) -- ce que je trouve étrange vu que C++ ne supporte pas les fonctions imbriquées, et qu'on ne déclare pas un pointeur de fonction. Pour résoudre l'ambigüité, le standard C++ spécifie donc que ne rien mettre après le nom revient a appeler le constructeur avec 0 arguments; sauf dans certains cas, cf. le paragraphe 8.5.8.
Utilisateur anonyme
17 déc. 2014 à 23:26
17 déc. 2014 à 23:26
J'ai compris :)
Merci pour la réponse et pour le temps que vous m'avez consacrer :)
Merci pour la réponse et pour le temps que vous m'avez consacrer :)