2 votes

Le mot clé explicit et les constructeurs avec plus d'un paramètre pour C++11

En général, j'ai entendu dire que c'est une bonne pratique d'utiliser le mot clé explicit sur les constructeurs avec un seul argument. Cependant, à partir de C++11, les constructeurs avec plus d'un argument peuvent être utilisés pour des conversions implicites. En tant que tel, est-ce une bonne pratique d'appliquer le mot-clé explicit à TOUS les constructeurs de > 0 arguments ?

0voto

Yakk Points 31636

La règle générale pour l'explicite est la suivante : voulez-vous que ce constructeur soit appelé implicitement ?

Si oui, ne le rendez pas explicite.

Si non, rendez-le explicite.

Pour les ctors à 1 argument, si la conversion à partir de ce type est aussi sans perte et inoffensive que la conversion d'un ctor à 1 argument. int à un double au besoin, rendez-la implicite.

Pour les ctors à >1 argument, déterminez si vous voulez {} la construction basée sur le travail. C'est parfois une bonne idée, parfois une mauvaise idée.

Dans C++11 et 14, {} est nécessaire pour renvoyer une valeur à partir d'une fonction lorsque le type ne peut pas être déplacé ou copié. Dans certains cas, vous utiliserez un type de balise pour faire de la {} plus explicite qu'elle ne le serait autrement si vous voulez éviter les "implicites". {} usage" pour une raison quelconque.

En C++17, il y a moins de raisons d'avoir vraiment besoin de {} car les valeurs ne sont plus des objets mais des instructions de construction, ce qui signifie que return T(blah) ne déplace pas/copie le T dans une fonction retournant T mais plutôt une direction qui la construit à partir de blah .

Quand exactement vous voulez bloquer {} est une question d'opinion, et ne convient pas à une séance de questions-réponses.

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