J'ai une fonction, comme tel: comme on peut le voir, il semblerait donc Pour moi, j'ai besoin d'une valeur nominale pour aller dans cette fonction pour J'ai essayé de le jeter, comme dans Comment devrais-je aller à ce sujet? < / p> Je travaille avec C ++ 98. P> P> vect code> est laissé seul, sauf si
checkint code> est supérieur à 0 . Donc, si je veux passer
checkint code> 0, alors il semble que je n'aurais pas à vous inquiéter de
vect code>. P>
Vect code>, de sorte quelle valeur fonctionnerait, ou dois-je réussir un vecteur factice? Mon idée était de simplement passer 0, mais je suppose que cela ne fonctionnerait pas. P>
foo (0, (vecteur
VOCT CODE>, il vient d'être affiché comme vide (non 0 à l'intérieur), avec la fonction écrite comme suit: p>
3 Réponses :
Modifier la déclaration de fonction pour accepter une référence du vecteur pour éviter de copier de la mémoire inutilement comme: si vous avez déjà un objet vectoriel, vous pouvez passer cela même s'il n'est pas utilisé. Si vous devez construire un vecteur factice, vous pouvez appeler la fonction comme ceci: p>
Cela ne compilera même pas. Les temporaires ne peuvent pas se lier à des références mutables.
@Samvarshavchik Vous avez raison, j'ai négligé cela; édité.
Le code semble que la fonction décide si le vecteur est utilisé ou non, mais ce que vous voulez faire suggère que c'est l'appelant qui décide si le vecteur est utilisé ou non. Qui est-ce vraiment? Je pense que vous avez un problème de conception, corrige que vous n'avez plus besoin de lancer plus de 0 à un vecteur. (par exemple, faire deux fonctions, une prise d'un vecteur, l'autre ne prenant aucun vecteur comme paramètre) p>
Quoi qu'il en soit, vous voudrez peut-être regarder Vos couts ne créent pas de vecteur rempli de std :: en option Code>
qui n'est disponible que depuis C ++ 17, mais cela pourrait vous inspirer de la manière de gérer une telle situation de manière propre. La méthode "sale" est de passer un pointeur, puis de vérifier si c'est un nullptr code> à l'intérieur de la fonction. P>
0 code> mais un vecteur avec la taille
0 code>. P>
Vous pouvez fournir une surcharge pouvant être appelée sans le vecteur. Vous pouvez refacturer la partie commune dans une sous-fonction:
void foo(int checkInt, vector<int> vect, int x) { if (checkInt > 0) { bar(checkInt, x); //do something to vect } else { foo(checkInt, x); } } void foo(int checkInt, int x) { assert(checkInt <= 0); // maybe unnecessary. depends on what you need bar(checkInt, x); Timer.rset(); } void bar(int checkInt, int x) { EXECx = x; EXECcheckInt = checkInt; } // with vect foo(checkInt, vect, x); // without vect foo(0, 0);
On dirait que vous avez besoin de deux fonctions distinctes
Qu'est-ce que "faire quelque chose pour vecter"? Modifier VECH?
@Jabberwocky La fonction que j'essaie de reproduire (c'est dans une autre langue) copie le contenu de VECT à un autre vecteur - c'est le "faire quelque chose à vecter"
(vecteur) 0 code> résout réellement à un
static_cast code>, qui est juste une manière étrange d'appeler constructeur n ° 2 ici , dont le paramètre est la taille souhaitée.
Peut-être que si vous changez de la signature de votre fonction en VOID FOO (int, Vecto *, int x) Vous passez null comme paramètre vectoriel.
@TryBghost si
VOCT code> est uniquement lu, alors votre fonction doit être:
Void FOO (int Checkint, Const Vecteur & Vect, int x) code>. Mais vous pouvez passer juste n'importe quel
vecteur code> comme valeur nominale de toute façon.