Aktywne Wpisy
njdnsjdnjs +4
do jakiej znanej osoby jesteście podobni
Marek_Tempe +7
Od zawsze interesuję mnie sfera snów, ich dynamika, poziom dziwności, odniesienia do dnia codziennego, kultury i symboliki oraz prekognicja. Może ktoś zechciałby się podzielić swoimi snami? Być może część z nich uda mi się zinterpretować na tyle na ile pozwoli moja wiedza oraz znajomość danego użytkownika. Rozumiem, że dzielenie się pewnymi treściami na forum może być trudne, więc zapraszam również na priv, ale bez przesady, pełna dyskrecja i ludzkie podejście. Proszę o




foo(const int A)->
foo(final int A)#naukaprogramowania #januszeprogramowania
@Xonar: Nie wprowadzaj ludzi w błąd.
Po pierwsze, jeżeli mówimy o typach prostych (int) to zarówno const jak i final jest bezsensowne, bo wartość tak czy inaczej jest kopiowana. To tak na marginesie.
Ogólnie, działanie final w Javie jest zupełnie inne niż działanie const w C++.
const - zapewnia stałą wartość
final - zapewnia stałą referencję
To znaczy, że jak w C++ przyjmiesz stałą referencję na obiekt klasy
(czyli jednak nie)
Odpowiadając na pytanie, moim zdaniem jest bezsensowny. Deklaracja foo(const A& a) mam za zadanie zdefiniować kontrakt. To znaczy, że zapewnia Cię, że funkcja foo nie zmieni obiektu a który jej podasz, możesz to zrobić bezpiecznie.
Deklaracja foo(const int n) nie niesie żadnej informacji dodanej w stosunku do foo(int n). Bo n, którego Ty użyjesz w metodzie
@CamelCase: mozesz, jesli klasa obiektu ma pola mutable:
class Klass{
public:
mutable int x=0;
};
void tester(const Klass& klass){
klass.x = 3;
}
Co do dalszej części wypowiedzi- nie rozumiem, co mi się nie skompiluje? Bez const mogę przypisywać i porównywać, z constem kompilator nie pozwoli przypisać. Jeżeli chcesz zmieniać n w trakcie działania, zawsze możesz utworzyć kopię i ją zmieniać, nie tracąc informacji o pierwotnej wartości parametru - wydaje mi się właśnie że to już kwestia raczej ideologiczna.
@Mongoloid: Podejrzewam, że masz rację. ( ͡° ͜ʖ ͡°)
No właśnie. Co mnie, użytkownika utworzonej przez Ciebie funkcji, obchodzi ideologia jaką się kierowałeś przy jej implementowaniu? Po prostu nie potrzebuję tej informacji w deklaracji, że nie zmienisz w środku swojej kopii n. I naprawdę nie rozumiem
@CamelCase: Dodaj "\* możesz, ale zazwyczaj nie powinieneś" i będzie dobrze
Widziałem też więcej przypadków użycia tego niż tylko muteksy itp. zazwyczaj jeśli klasa ma swój własny stan + jakieś wewnętrzne mechanizmy/obiekty, które mogą się zmieniać bez zmiany tego obiektu. Prosty