Numărul nedefinit de argumente pentru funcția - depășirea stivei în limba rusă

Despre stdarg deja spus. Chudnenko.

Dar în C ++ 11 a apărut un nou instrument puternic - șabloane cu un număr variabil de argumente (șabloane variadic). Nu voi descrie în detaliu, puteți citi aici. și apoi Google. De asemenea, o bună descriere este disponibilă în noua ediție a lui Josattis Biblioteca Standard CPP (care ar trebui să fie în curând publicată în limba rusă).







Da, în C ++ este posibilă o funcție cu un număr variabil de argumente. Pentru a face acest lucru, puneți o elipsă în lista parametrilor formali.

Pentru a avea acces trebuie utilizat indicatorul, fiecare următorul argument „este distanțată„unul de altul prin tipul specificat sizeof, deci este necesar să incrementa pointer la această valoare, utilizând de exemplu + =. Pentru a găsi sfârșitul lista de argumente, folosind astfel de metode - sau unul dintre argumentul explicit se referă la numărul de argumente reale „incerte“, sau de a folosi valoarea marker pentru ultimul argument (de exemplu, 0, NULL, -1 - principalul lucru pe care o valoare nu a fost „legală“, potrivit logicii . Detaliile funcției de aici sau de aici În general, această temă este ușor de Google, astfel că nu sunt cu adevărat încearcă să dea un subiect complet INFu, dar în cazul în care nu este clar - cere ajutor







În principiu, da, în C ++ există posibilitatea de a crea funcții cu un număr necunoscut de parametri în avans. Pentru aceasta, utilizați următoarea sintaxă:

După cum puteți vedea, pentru a indica faptul că numărul de parametri este necunoscut, este plasată o elipsă. Trebuie amintit că o astfel de funcție ar trebui să fie definit primul parametru (tipul și numele), deoarece interacțiunea cu restul argumentelor se bazează pe indicatorul curent - accesul la argumentele aduse în mod indirect - prin intermediul primului pointer. Prin adăugarea unui offset la pFirst, puteți accesa următoarele funcții. Pentru exemplul dvs., acesta va arăta astfel: pFirst [16].

Trebuie spus că această metodă - nu este o soluție foarte bună, deoarece în acest caz, pot exista probleme cu siguranța de tip - în principiu, puteți transmite argumente de orice tip, iar compilatorul nu va spune nimic, dar este plină de erori de rulare. Sotvetsvenno, această metodă este mai potrivită pentru transferul unui număr de aceleași valori, dar în acest scop este, în majoritatea cazurilor, mult mai rațional să se utilizeze o matrice







Articole similare

Trimiteți-le prietenilor: