4 votes

Constructeurs par défaut multiples

De cette question de stack overflow la réponse contient cette citation :

... la définition dit que tous les constructeurs par défaut (au cas où il y en aurait plusieurs) ...

Comment peut-il y avoir plusieurs constructeurs par défaut, et pourquoi cela peut-il être utile ou autorisé par la norme ?

9voto

Asteroids With Wings Points 16164

Les constructeurs par défaut ne doivent pas nécessairement être dépourvus de paramètres ; ils doivent simplement être invocables sans arguments.

Cette condition est remplie par tout constructeur dont les arguments ont tous des valeurs par défaut.

[class.dtor/1]: Un constructeur par défaut pour une classe X est un constructeur de la classe X pour lequel chaque paramètre qui n'est pas un paquet de paramètres de fonction a un argument par défaut (y compris le cas d'un constructeur sans paramètres). [..]

struct Foo
{
   Foo(int a = 0);
   Foo(std::string str = "");
};

Bien entendu, dans cet exemple, vous ne pouvez pas instancier une Foo utiliser l'un ou l'autre sans fournir d'argument (l'appel serait ambigu). Mais Foo est toujours utilisable, et ce sont toujours des "constructeurs par défaut". C'est simplement la façon dont la norme a décidé de classer les choses, dans le but de définir des règles. Cela n'affecte pas vraiment votre code ou votre programmation.

(En passant, je ne voulais pas vous distraire mais vous auriez dû explicit sur les deux !)

0voto

bolov Points 4005

Voici un exemple de classe avec deux constructeurs par défaut qui peuvent être construits par défaut :

struct Foo
{
    Foo(); // #1

    template <class... Args>
    Foo(Args...); // #2
};

auto test()
{
    Foo f{}; // ok calls #1
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X