Wpis z mikrobloga

@ly000:

no tylko, że referencja nic nie wie ani o pamięci ani o adresie.


@ly000: No niby jak nic nie wie, jak jest reprezentowana jako wskaźnik na obiekt.

Słowa "referencja" i "wskaźnik" to ogólnie synonimy. Semantycznie wskaźniki w C i C++ zachowują się tak samo jak referencje w Javie. A standard C++ też nie mówi nic o tym jak je faktycznie kompilator może reprezentować pod spodem. Zresztą na nowoczesnych OSach
dlaczego arytmetyka na wskaźnikach jest możliwa,


@ly000: btw, arytmetyka na wskaźnikach w C++ jest możliwa tylko w bardzo szczegolnych przypadkach, tj tylko jeśli mamy wskaźniki tego samego typu pochodzące z tego samego obiektu. Czyli można tak przeglądać tablice, ale nie jest dozwolone np obliczanie różnicy między dwoma arbitralnymi wskaźnikami. Czyli jednak wskaźniki C++ nie są wskaźnikami w myśl definicji jak pisałeś wyżej tylko właśnie abstrakcyjnymi referencjami implementowanymi pod spodem jako wskaźnik,
Słowa "referencja" i "wskaźnik" to ogólnie synonimy.

ani wikipedia ani literatura tego nie potwierdzają. zauważasz podobieństwa, ale pomijasz różnice. jakbym powiedział, że kaczka i gęś to dwa różne zwierzęta, to też byś napisał tekst, że to jest to samo, bo mają dzioby, pióra i potrafią pływać? wskaźnik i referencja to są koncepty z dziedziny informatyki, a nie jakieś składnie językowe. wskaźnik to jest typ referencji, ale referencja nie jest typem wskaźnika. nie
mogę w javie napisać funkcje swap,


@ly000: nie możesz. Nie możesz napisać funkcji która zamienia miejscami wartości przekazane jako argumenty i zamiana jest widoczna po powrocie z funkcji.

int a = 0;
int b = 1;
swap(a, b);
// w tym miejscu a == 1, b == 0

Nie możesz napisać bo Java jest pass-by-value. A C++ ma jeszcze oprócz pass-by-value również pass-by-reference.
Czyli można tak przeglądać tablice, ale nie jest dozwolone np obliczanie różnicy między dwoma arbitralnymi wskaźnikami. Czyli jednak wskaźniki C++ nie są wskaźnikami w myśl definicji jak pisałeś wyżej tylko właśnie abstrakcyjnymi referencjami implementowanymi pod spodem jako wskaźnik, zupelnie jak w Javie. Ba, jak do wskaznika w C++ dodasz 1 to wartość adresu wcale nie musi zwiększyć się o 1, czyli już masz tu abstrakcję.


@Krolik: ()
ani wikipedia ani literatura tego nie potwierdzają.


@ly000: synonim nie oznacza że pojęcia są dokładnie takie same, subtelne różnice mogą występować. Ok, zgoda że, referencja jest konceptem bardziej ogólnym. Niemniej akurat w javie referencje są implementowane jako wskaźniki (do tego zupelnie nagie wskaźniki o tej samej szerokości co by były w C na tej samej architekturze), więc stwierdzenie "Java nie ma wskaźników" jest błędne. No i w praktyce, dla codziennego progtamowania