-1
votes

Existe-t-il un moyen d'appeler explicitement des arguments facultatifs en C ++?

Lorsque je crée une fonction telle que:

int supplémenthree (int x = 1, int y = 1, int z = 1)

Je veux appeler la fonction de telle sorte qu'il utilise les arguments par défaut pour x et z, mais pas y.

Certaines tentatives ont été AddThree (5, 5) et AddThree (5, NULL, 5) , mais ne fonctionne pas efficacement.


6 commentaires

"Arguments par défaut pour x et z", mais vous fournissez ensuite 5 pour x et z?


Jetez un coup d'œil à Ce lien


@Tonytannous lol typo mon mauvais


Aussi, gardez toujours à l'esprit que NULL, en C / C ++ est #define NULL 0. Donc, chaque fois que vous passez NULL, ce n'est pas que vous n'abumez pas un argument, à la place, vous passez un zéro comme argument


@Nicky Yeux, de quelle manière était-ce une faute de frappe? Comme dans vous voulez que X et Z ont des arguments par défaut, ou vous ne le faites pas? Veuillez clarifier, faire valoir la question, à ce stade, peut glisser à la fois ...


@ d4rk4ng31 lol c'était mon erreur. Je voulais dire que je voulais utiliser l'argument par défaut de Y, tout en déclarant des arguments non par défaut pour X et Z.


3 Réponses :


5
votes

Les arguments par défaut doivent être au dernier de votre liste, de même que procéder comme suit xxx

, d'où vous pouvez l'appeler comme xxx < / p>


3 commentaires

Je ne suis pas le Downvoter (je suis le prélevoteur), je suppose que le Downvoter s'attend à ce que vous remplaciez que // Quelques trucs avec int sint = x + y + z , cause qui est littéralement la seule "amélioration" possible XD


Merci @asmmo C'est une excellente explication. Donc, juste pour clarifier, si je veux utiliser l'argument par défaut pour l'un de mes options, je dois également utiliser les défauts de tous les arguments suivants?


@nickyeyes oui. Mais vous pouvez surcharger la fonction pour le rendre plus flexible.



1
votes

Si vous transmettez systématiquement une valeur pour un paramètre et à l'aide des valeurs par défaut pour les autres, vous pouvez réorganiser les paramètres sur celui que vous devez passer est d'abord, et ceux pour lesquels vous utilisez des valeurs par défaut sont plus tard. Mais cela ne fonctionne que si c'est essentiellement toujours les mêmes pour lesquels vous fournissez une valeur par rapport à une valeur par défaut.

Sinon, si vous avez besoin de quelque chose de similaire à la fonctionnalité de base suffisamment, vous pouvez passer une instance d'une classe et avoir cette classe implémenter le paramètre nommé Idiom. P>

class triplet { 
    int x_ {1};
    int y_ {1};
    int z_ {1};
public:
    triplet &x(int val) { x_ = val; return *this; }
    triplet &y(int val) { y_ = val; return *this; }
    triplet &z(int val) { z_ = val; return *this; }

    int x() const { return x_; }
    int y() const { return y_; }
    int z() const { return z_; }
};

int addThree(triplet const &t) { 
    return oldAddThree(t.x(), t.y(), t.z());
}

int ans = addThree(triplet().x(4));


0 commentaires

2
votes

Les arguments par défaut en C ++, doivent être spécifiés dans une succession immédiate et ne peuvent pas être réussi par un paramètre non par défaut.

donc, quelque chose comme xxx

est Interdit en C ++


La fonction doit être la suivante: xxx


Toutefois, tout en précisant les arguments par défaut, vous devez toujours avoir besoin de Prenez soin de la surcharge de fonction. Les fonctions surchargées ne peuvent pas être appelées ambiguës ..

de sorte qu'un code comme: xxx

ne compile pas et ne produit pas d'erreur d'ambiguïté, car le compilateur ne produit pas comprendre Si cela devrait appeler la première somme, ou la deuxième somme.


0 commentaires