2017-02-08 5 views
12

Est-il possible pour un constructeur surchargé d'appeler en quelque sorte un autre constructeur dans la classe, similaire au code ci-dessous? Le code ci-dessus fonctionne, mais j'ai peur que l'appeler dans le constructeur puisse conduire à un comportement indéfini.Existe-t-il un constructeur de commodité en C++?

Si oui, pourriez-vous expliquer pourquoi et aussi suggérer une meilleure alternative?

+6

Le terme que vous recherchez est "constructeurs de délégués". – nwp

+1

Pourquoi pas 'A (int i): m_str (std :: to_string (i)) {}'? – CoryKramer

+2

Ceci est un exemple minimal. Je veux surcharger un constructeur qui accepte 7 paramètres, dont 4 ont des valeurs par défaut et je veux éviter de définir explicitement les valeurs par défaut à plus d'un endroit. – Makaronodentro

Répondre

23

11 C++ introduit delegating constructors:

class A 
    { 
    public: 
    std::string m_str; 
    A(std::string str) : m_str(str) {} // target constructor 
    A(int i) : A(std::to_string(i)) {} // delegating constructor 
    }; 
+7

Cela pourrait valoir la peine de' m_str (std :: move (str)) '. – juanchopanza

+0

Il peut être intéressant de noter que le constructeur cible est appelé avant le constructeur délégué, donc dans le corps de ce dernier, vous pouvez supposer que le premier a été appelé. –