9
votes

Initialiser la carte et définir des variables de membre de la classe pour vider en C ++?

J'ai une classe C ++ avec deux variables de membre xxx

et xxx

Un vérificateur de style utilisé chez mon université nécessite toutes les variables des membres être initialisé dans le constructeur de la classe. Comment ces variables de membre A et B doivent-elles être initialisées pour vider dans le constructeur de la classe où elles sont dans?


1 commentaires

Vous avez commenté deux réponses avec "ces travaux, merci". Vous devriez maintenant accepter un (en cas de réponses identiques, généralement le premier). ;)


4 Réponses :


2
votes

J'aime ce SOMECLASS :: SOMECLASS (): A (), B () {} ?


0 commentaires

15
votes

Comme ceci:

class A
{
  public :

  A() : s(),
        m()
  {
  }


  std::set< int > s;
  std::map< int, double > m;
};


0 commentaires

2
votes

Comme std :: Set et std :: map ont des constructeurs par défaut "utilisateur", ils seront initialisés implicitement, mais vous construisez votre classe. Vous n'avez rien à faire de spécial pour vous conformer au guide "style".


4 commentaires

Merci Charles. Le problème ici était que la vérification du style est effectuée automatiquement dans le cadre d'un système de classement automatique et nécessite que toutes les variables des membres soient explicitement initialisées.


@Marek Miettinen: Êtes-vous sûr que le chèque de style ne s'applique pas uniquement aux types de pod? Je n'ai jamais vu un guide de style insister sur l'initialisation explicitement des choses qui ont des constructeurs par défaut qui seraient utilisés pour une initialisation implicite dans tous les cas.


Et si le vérificateur de style l'exige vraiment, il est cassé, simple comme ça.


@CHARLESBAILEYY donc juste déclarer une variable de membre de la carte de type et non l'initialisation de tout constructeur initialisera la variable? En C #, la variable pointe sur NULL à moins que son initialisée utilise explicitement le mot-clé nouveau . Ce n'est pas le cas en C ++?



0
votes

Cette vérification est effectuée par le compilateur g ++, lorsque l'option d'avertissement -weffc ++ est appliquée. Voir l'élément 4 ("Assurez-vous que les objets sont initialisés avant qu'ils soient utilisés" À Scott Meyers, efficace C ++, livre pour plus d'informations, Pourquoi il pourrait être raisonnable d'initialiser tous les membres à l'aide de la liste d'initialisation des membres. Fondamentalement, il suggère de le faire de manière cohérente et de préférer cela sur des missions à l'intérieur corps constructeur.


2 commentaires

Comment cela explique-t-il comment faire? La référence efficace C ++ est une bonne matière de recherche, mais pas une réponse.


@Peachykeen: Vous avez raison, c'est plutôt un commentaire qu'une réponse à la question initiale.