Funkcja zwracająca stałą?

Funkcja zwracająca stałą?
LU
  • Rejestracja:ponad 11 lat
  • Ostatnio:8 dni
  • Lokalizacja:Gdańsk
0

Może mi ktoś wytłumaczyć ten kod

Kopiuj
 const int fun() {      }

Funkcja zwraca wartosc typu int ale co powoduje const w tym przypadku ?


Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Dla inta nie mam pomysłu na zastosowanie szczerze mówiąc, ale zupełnie normalne jest zwracanie const char* co oznacza że nie wolno charów pokazywanych przez ten wskaźnik modyfikować.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

Wgl http://www.ebitech.pl/pl/blog/programowanie-c-cpp-2.html tutaj jest dość spoko art nt. const. Fajne to jest jak funkcja przyjmuje wskaźnik i widać od razu przez const, że go nie ruszy.
np. void f1(const owntype_t *ptr)


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
EM
że go ruszy ale nie naruszy ;)
Shalom
No dla wskaźników spoko, ale po co zwracać const inta? :D szczególnie że to przecież i tak kopia :D
KA
wiem co do zwracania to zgadzam się z Tobą. (nigdzie nie pisałam, że jest inaczej :p)
satirev
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 4 lata
1

W przypadku zwracania przez wartość typu stałego, prostego (np. const int) const przy zwracanym typie nie ma żadnego znaczenia - zwrócona będzie kopia obiektu.
const zaczyna mieć znaczenie dla typów złożonych - jeśli zwracasz obiekt const przez wartość nie możesz modyfikować r-value, jak i nie możesz użyć semantyki przenoszenia, która ma tylko sens w przypadku non-const r-value.

LU
  • Rejestracja:ponad 11 lat
  • Ostatnio:8 dni
  • Lokalizacja:Gdańsk
0

Naprzyklad nie rozumiem tego :

Kopiuj
 
const int* fun() { //tworze funkcje ktora zwraca wskaznik do stalego typu int 
	int *wsk=new int; //tworze wskaznik na typ int bez const
	return wsk; //zwracam te wartosc i odziwo dziala chociaz jest deklaracja typu int a nie const int* a funkcja zwraca przeciez const int*
}

int main() {

const int*v=new int; //a tutaj musze stworzyc const int* a we wnetrzu  funkcji nie musialem tego robic 
v=fun();


	return 0;
}

Ale wydaje mi sie ze chodzi tu o to ze typ zwracany wymusza aby ta wartosc ktora zostanie zwrocona byla przypisana wlasnie dla
wskaznika typu const int * .


Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2

Bo nie jest problemem wprowadzenie restrykcji -> dodanie const. Usunięcie restrykcji dopiero byłoby problematyczne.
No bo to co za problem kiedy weźmiesz kartkę papieru i zaczniesz na niej pisać (nie jest const) a następnie zalaminujesz i powiesz "teraz już nie wolno jej zmienić" (dodasz const). Jest to zupełnie normalne i logiczne. W drugą stronę niekoniecznie.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.