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

wywołanie metody wirtualnej w c++

Object Storage Arubacloud
+1 głos
575 wizyt
pytanie zadane 5 lutego 2018 w C i C++ przez mirk0 Nowicjusz (130 p.)

Witam, 

Mam do was jedno pytanie na egzaminie z c++ mam pytanie : zaznacz zdanie prawdziwe nie moge sobie z nim poradzić. Proszę o pomoc

Wywołanie metody wirtualnej jest szybsze niż wywołanie metody niewirtualnej.

Nie ma różnicy szybkości przy wywołaniu metody wirtualnej i niewirtualnej.

Wywołanie metody wirtualnej jest wolniejsze niż wywołanie metody niewirtualnej.

Szybkość wywołania zależy od tego, czy wywołanie metody następuje przez typ podstawowy czy pochodny w hierarchii dziedziczenia.

2 odpowiedzi

+1 głos
odpowiedź 5 lutego 2018 przez monika90 Pasjonat (22,940 p.)
edycja 5 lutego 2018 przez monika90
To zależy od implementacji.

Może być szybsze, wolniejsze, takie samo, albo szybsze dla pewnych wywołań, a wolniejsze dla innych. Implementacje C++ mogą (ale nie muszą) używać różnych technik optymalizacji które wpływają na szybkość wywołania, np. dewirtualizacja albo rozwinięcie w miejscu wywołania.
komentarz 5 lutego 2018 przez mokrowski Mędrzec (156,220 p.)

No jest jak napisałaś @monika90. Spekuluję jednak że to klasyczne pytanie "co profesur miał na myśli" :-/ I wtedy strzelał bym w błędną odpowiedź:

Wywołanie metody wirtualnej jest wolniejsze niż wywołanie metody niewirtualnej.

Bo pewnie przeczytał o tablicach vtable ale już nie doczytał w standardzie że narzuconego sposobu implementacji nie ma :-/ Eh... 

komentarz 7 lutego 2018 przez dariusz Obywatel (1,800 p.)

@monika90, Szybsze nigdy nie będzie. https://en.wikipedia.org/wiki/Virtual_method_table

1
komentarz 7 lutego 2018 przez adrian17 Ekspert (346,320 p.)

To zależy od implementacji.

wtedy strzelał bym w błędną odpowiedź:

Bo pewnie przeczytał o tablicach vtable ale już nie doczytał w standardzie że narzuconego sposobu implementacji nie ma

Sam lubię language lawyering, ale na litość... W tym pytaniu faktycznie nie było wspomnianej konkretnej implementacji, ale nie było też "według standardu C++" - czepiacie się o pytanie dotyczące powszechnie przyjętego, sprawdzającego się w praktyce, wydajnościowego rule of thumb.

Jedyne, co bym zarzucił, to że pytanie prawdopodobnie ignoruje możliwą dewirtualizację i wpływ `final`.

0 głosów
odpowiedź 7 lutego 2018 przez dariusz Obywatel (1,800 p.)
Jeżeli używasz polimorfizmu, to jest wolniejsze. Żadna z podanych odpowiedzi nie jest wystarczająco precyzyjna.

Przyjrzyj się jak to wygląda pod spodem:

https://godbolt.org/g/wXBnCL
komentarz 7 lutego 2018 przez adrian17 Ekspert (346,320 p.)

@dariusz, Boczny feedback: przykłady na godbolcie często są prostsze i czytelniejsze bez main'a i implementacji metod :) (takie pełne przykłady jak u Ciebie są łatwe dla kompilatora do zoptymalizowania - z -O cały main() został uproszczony do no-opa)

https://godbolt.org/g/sd2419

Podobne pytania

0 głosów
2 odpowiedzi 2,425 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez Utau Użytkownik (900 p.)
0 głosów
1 odpowiedź 199 wizyt
0 głosów
2 odpowiedzi 1,049 wizyt
pytanie zadane 8 grudnia 2018 w C i C++ przez dawid2002 Mądrala (5,190 p.)

92,693 zapytań

141,606 odpowiedzi

320,106 komentarzy

62,051 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

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!

...