Tout dépend des hypothèses que vous pouvez faire sur le type.
template<typename T> T sum( T a, T b, T c = T()){return a+b+c;}template<typename T> T sum2( T a, T b, T c = T(5)){return a+b+c;}
Le premier cas, il ne suppose que T la valeur par défaut est constructible. Pour POD types qui est la valeur inititalization (IIRC) et est fondamentalement 0, donc sum( 5, 7 ) appellera sum( 5, 7, 0 ).
Dans le second cas, vous avez besoin que le type peut être construit à partir d'un entier. Pour les types intégraux, sum( 5, 7 ) appellera sum( 5, 7, int(5) ) qui est équivalent à sum( 5, 7, 5 ).
La valeur par défaut arguments sont instanciés que si elles sont utilisées. Ce qui signifie que l'on peut mettre n'importe quel truc de fou en eux qui ne serait pas compatible avec T à tous, ce qui serait bien, aussi longtemps que l'on passe un argument explicite.
Oui, il y a juste besoin d'être un constructeur de T quelle qu'en soit la valeur de vous y mettre. Étant donné que le code que vous montrez, je suppose que vous auriez probablement souhaitez que cet argument 0. Si vous voulez plus d'un argument du constructeur, vous pourriez mettre T(arg1, arg2, arg3) comme valeur par défaut.
Essayez ceci:
Vous pouvez également mettre en T(5) si vous vous attendez à un type intégral et souhaitez la valeur par défaut est 5.
OriginalL'auteur Scharron
Tout dépend des hypothèses que vous pouvez faire sur le type.
Le premier cas, il ne suppose que
T
la valeur par défaut est constructible. Pour POD types qui est la valeur inititalization (IIRC) et est fondamentalement0
, doncsum( 5, 7 )
appellerasum( 5, 7, 0 )
.Dans le second cas, vous avez besoin que le type peut être construit à partir d'un entier. Pour les types intégraux,
sum( 5, 7 )
appellerasum( 5, 7, int(5) )
qui est équivalent àsum( 5, 7, 5 )
.T
à tous, ce qui serait bien, aussi longtemps que l'on passe un argument explicite.OriginalL'auteur David Rodríguez - dribeas
Oui, vous pouvez définir une valeur par défaut.
Malheureusement constructThird ne peut pas prendre de a et b comme des arguments.
OriginalL'auteur computinglife
Oui, il y a juste besoin d'être un constructeur de
T
quelle qu'en soit la valeur de vous y mettre. Étant donné que le code que vous montrez, je suppose que vous auriez probablement souhaitez que cet argument0
. Si vous voulez plus d'un argument du constructeur, vous pourriez mettreT(arg1, arg2, arg3)
comme valeur par défaut.OriginalL'auteur Phil Miller
Oui!
Cependant, vous devriez au moins avoir une idée sur ce que T peut être ou c'est inutile.
Vous ne pouvez pas définir la valeur par défaut des paramètres du modèle pour les fonctions, c'est à dire ce qui est interdit:
OriginalL'auteur Tomaka17