• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wektory w parametrze funkcji

Hosting forpsi easy 1 pln
+1 głos
89 wizyt
pytanie zadane 23 sierpnia w C i C++ przez Janchess Początkujący (480 p.)
Czy wektory przekazywane są do funkcji jako oryginał czy jako kopie ?

2 odpowiedzi

+2 głosów
odpowiedź 23 sierpnia przez adrian17 Ekspert (336,420 p.)

Tak samo jak wszystko inne - zależy od typu argumentu.

// kopia
void f(int x);
void f(float x);
void f(JakasStruktura x);
void f(std::string x);
void f(std::vector<int> x);

// "przez wskaźnik" (wciąż kopia, ale... no, wskaźnika)
void f(int *x);
void f(JakasStruktura *x);
etc

// referencja
void f(int &x);
void f(std::vector<int> &x);
etc

 

komentarz 23 sierpnia przez Janchess Początkujący (480 p.)
Dlaczego zatem tablice nigdy nie są kopiowane ?
komentarz 23 sierpnia przez VNC Nowicjusz (240 p.)
taka specyfika C++
komentarz 23 sierpnia przez adrian17 Ekspert (336,420 p.)
edycja 23 sierpnia przez adrian17

"Stare" tablice to wyjątek, nie możesz zapisać przekazywania ich przez kopię bo język traktuje zapis tak jak gdyby był przekazywaniem wskaźnika:

void f(int tab[5]);
void f(int tab[]);
// to tak naprawdę jest to samo co:
void f(int *tab);

Można je wciąż przekazać przez referencję:

void f(int (&tab)[5]);

Ale no, często w takich sytuacjach się preferuje zamiast starych tablic używać std::array, który jest analogiczny do zwykłych tablic i można (tak jak wszystko inne) przekazywać go przez wartość/referencję/etc normalną składnią:

void f(std::array<int, 5> tab);

 

1
komentarz 24 sierpnia przez Oscar Nałogowiec (29,130 p.)

@Janchess, Bo język może nie znać rozmiarów tablicy.

+1 głos
odpowiedź 23 sierpnia przez tangarr Mędrzec (154,200 p.)

Wszystkie parametry przekazywane przez wartość są kopiowane. Żeby przekazać oryginalny parametr musisz przekazać referencję.

// funkcja która może zmodyfikować oryginalny wektor
void funkcja(std::vector<TYP> &wektor);

//funkcja która może tylko czytać z wektora bez modyfikacji
void funkcja2(const std::vector<TYP> &wektor)

 

Podobne pytania

0 głosów
1 odpowiedź 429 wizyt
pytanie zadane 28 kwietnia 2020 w C i C++ przez Adrian Maj Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 215 wizyt
pytanie zadane 18 kwietnia 2018 w C i C++ przez Perseusz Bywalec (2,190 p.)
0 głosów
0 odpowiedzi 476 wizyt
pytanie zadane 12 kwietnia 2017 w C i C++ przez ChiriChiri Obywatel (1,260 p.)

92,080 zapytań

140,736 odpowiedzi

317,696 komentarzy

61,401 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia w koszyku, uzyskując rabat aż -50% (w dniach 24.11 - 29.11 z okazji Black Friday, a potem będzie to -30%) na bilety w wersji "Standard"! Więcej informacji na temat akademii znajdziecie tutaj. Dziękujemy Sekurakowi za tak fajną zniżkę dla Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 15% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...