Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

pomocy:!


KetsU

Rekomendowane odpowiedzi

Opublikowano

Potrzebuje 2 zadan z opisem na temat "Przekazywanie parametrów przez referencje"

I wyjaśnienie na czym polega przekazywanie parametrów przez referencje:

Nieregulaminowa sygnatura

Opublikowano

Wszelkie przykłady przekazywania przez referencję na typach predefiniowanych (int, long, char, etc.) zupełnie mijają się z celem, gdyż [w większości kompilatorów] ich wielkość jest równa/mniejsza wielkości wskaźnika (4 bajty).

 

assert(sizeof(int) == sizeof(int*))

 

Natomiast gdybyś przekazywał własne obiekty

 

#include <iostream>

class f{
int r[0xFFFFF];
};

int main() {
std::cout << sizeof(f) << std::endl;
std::cout << sizeof(f*);
}

 

Widać olbrzymią różnicę zużycia pamięci (oraz szybkości wykonywania, gdyż wszystkie argumenty funkcji wrzucane są na stos).

 

Podczas przekazywania przez wskaźnik, "wysyłany" jest do funkcji tylko 4bajtowy (lub coś koło) wskaźnik na obiekt.

 

Przekazywanie przez referencję to po prostu utajnione przekazywanie wskaźnika, i generalnie zaleca się, żeby tego nie robić, jeśli funkcja nie jest "samo-wytłumaczalna" w swoim zamiarze zmodyfikowania swojego obiektu.

 

void teraz_zmienie_ten_obiekt(&ClassType object) { ... } // w porządku, po void'zie tak nazwanym spodziewamy się, że coś namiesza

ClassType przelicz( int &v ) { ... } // przekazanie zmiennej int może - w ciele funkcji - spowodować jej modyfikację. Funkcja "sama-w-sobie" na taką modyfikację nie wskazuje. Należy raczej użyć przekazania przez wskaźnik, dzięki czemu programista korzystająca z funkcji będzie musiał świadomie wskaźnik przekazać

 

 

@EDIT

Przekazanie przez wskaźnik jest moim neologizmem, na potrzeby pytania.

Ta sygnatura jest pusta.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...