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

Funkcje inline

Object Storage Arubacloud
+1 głos
1,580 wizyt
pytanie zadane 24 sierpnia 2015 w C i C++ przez Patrycjerz Mędrzec (192,320 p.)
Witam,

czytałem sobie przed chwilą co nieco o funkcjach inline. Tzn. znałem je już wcześniej, ale chciałem dowiedzieć się o nich coś więcej. Działają tak samo, jak zwykłe funkcje, przestrzeń nazw też ta sama, mają adres, więc można korzystać ze wskaźników, tylko są wykonywane szybciej.

Tutaj moje pytanie: czy korzystanie ze zwykłych funkcji to dziś przeżytek? Wszystko przemawia za tym, aby korzystać tylko z nich. Może ktoś poda jakiś kontrargument...

Za odpowiedzi będę bardzo wdzięczny. Pozdrawiam!

7 odpowiedzi

+1 głos
odpowiedź 24 sierpnia 2015 przez hit02 Nałogowiec (33,970 p.)
wybrane 28 sierpnia 2015 przez Patrycjerz
 
Najlepsza
Z tego, co pamiętam, to nie można było ich używać wewnątrz klas (ostatnio nie mogłem skompilować inline getera) i chyba jeszcze nie mogą to być funkcje rekurencyjne. Dodatkowo zwiękrzają rozmiar pliku exe, bo są wkompilowywane wiele razy (chyba, że wywołasz funkcję tylko raz). Podobno (nie sprawdzałem) dzisiejsze kompilatory mogą bezczelnie zignorować to słówko, bo zysk czasowy dziś i tak byłby znikowmy, ale może na jakiejś specyficznej architekturze opłacało by się je stosować.

Swoją drogą przypominają one trochę rozwinięte pętle.
komentarz 24 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)
Czytałem, że funkcje zdefiniowane w klasie są już z automatu inline. Ktoś coś wie więcej na ten temat?
komentarz 24 sierpnia 2015 przez Boshi VIP (100,240 p.)
Jak funkcja ma  kilka instrukcji w sobie albo pętlę to kompilator zignoruje słówko inline i potraktuje ją jako zwykłą, przynajmniej tak czytałem bodajże w symfoni, jak otworze potem książkę to ci zacytuje dokładnie.

Chyba, że coś się zmieniło od tego czasu.
komentarz 24 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)

Dzięki Boshi, warto wiedzieć wink Ale to dotyczy wszystkich funkcji inline, czy tylko tych, co są zdefiniowane w klasie?

komentarz 24 sierpnia 2015 przez hit02 Nałogowiec (33,970 p.)

Z tego, co widziałem, jest to normalna funkcja przyjmująca dodatkowo implisit wskaźnik na strukturę klasy (Chodzi mi o to, że na same dane.). Może jakiś inny kompilator niż MSVC++ i g++ tak robią, bo tylko te były na filmie. smiley

+2 głosów
odpowiedź 24 sierpnia 2015 przez Dorion300 Szeryf (90,250 p.)
edycja 24 sierpnia 2015 przez Dorion300
Jak się używa funkcje inline to się po prostu kopiuje całą funkcje i wstawia w to miejsce gdzie się ją wywołuje.

Straszny syf będzie się miało po skompilowaniu jak i dużo plik .exe zajmował.

Ten cały inline jest słaby, polecam używać w bardzo małych funkcjach. Więc nie jest to zalecana metoda.
komentarz 24 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)

Coraz więcej kontrargumentów... nie spodziewałem się tego smiley

+1 głos
odpowiedź 24 sierpnia 2015 przez krecik1334 Maniak (58,390 p.)
Rekurencyjne funkcje inline.
komentarz 24 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)
edycja 24 sierpnia 2015 przez Patrycjerz

Czyli to jedyny kontrargument? Jeśli tak, to dlaczego prawie nikt ich nie używa? Rekurencja jest dość żadko rzadko stosowana. Może chodzi tylko o przyzwyczajenia programistów?

EDIT: ŻADKO, co mi się dzisiaj dzieje? smiley

+1 głos
odpowiedź 24 sierpnia 2015 przez niezalogowany
No, z funkcji inline nie można jednak zawsze korzystać. Funkcję można zrobić inline wtedy, gdy w jej ciele nie ma za dużo instrukcji, jedna linijka, dwie, coś koło 3 maximum. Jak funkcję, która ma z 10 linijek, zrobimy inline, to raczej już nie będzie tak szybko :I Przynajmniej tyle wiem z ,,Symfonii C++" ;)
komentarz 24 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)
Aha, czyli nie są one zrobione ze szczerego złota, jak to je opisują... dzięki za odpowiedź.
komentarz 24 sierpnia 2015 przez niezalogowany
No niestety :'( Jakby były, to tylko ich używać ;)
+1 głos
odpowiedź 24 sierpnia 2015 przez criss Mędrzec (172,590 p.)
Z tego, co wiem, sprawa z inline wygląda tak, że kompilator w miejsce wywołania funkcji inline po prstu wrzuca jej kod (wypełniony oczywiści ładnie argumentami jeśli jakieś są). Dlatego - fakt, są szybciej wykonywane i zdecydowanie opłaca się używać inline przy funkcjach wykonywanych BADZO często i jednocześnie bardzo krótkich. Jeśli będa to jakieś dłuższe funkcje, a w kodzie jest dużo ich wywołań, to siłą rzeczy plik exe będzie ważył dużo więcej (tym samym zużywając więcej ramu).
komentarz 24 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)
Aha, czyli przez to, że są wpisywane do kodu, to także robią program bardziej zasobożernym... ciekawe.
+1 głos
odpowiedź 24 sierpnia 2015 przez Sebastian Fojcik Nałogowiec (43,020 p.)

Jako ciekawostkę dodam, że wszystkie funkcje, które są zdefiniowane wewnątrz klasy, przez domniemanie są typu inline.

class Napis
{
	string napis;
public:

	void wypisz()
	{
		cout << napis;
	}
	
	void wczytaj();
}

void Napis::wczytaj()
{
	cin >> napis;
}

Funkcja "wypisz" jest typu inline z domniemania, a "wczytaj" to zwykła funkcja :-)

komentarz 24 sierpnia 2015 przez Patrycjerz Mędrzec (192,320 p.)

Ciekawe... ale już to było poruszane w tym pytaniu. Przykro mi sad

0 głosów
odpowiedź 24 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)

Fajny artykół o inline: LINK

Podobne pytania

+1 głos
2 odpowiedzi 115 wizyt
pytanie zadane 5 lipca 2020 w JavaScript przez TOWaD Mądrala (5,700 p.)
0 głosów
1 odpowiedź 584 wizyt
pytanie zadane 30 czerwca 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)
+1 głos
2 odpowiedzi 283 wizyt
pytanie zadane 4 czerwca 2016 w Bezpieczeństwo, hacking przez pankracy Nowicjusz (130 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich 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 10% 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!

...