• 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++

VPS Starter Arubacloud
+1 głos
565 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 (155,460 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 (344,100 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 (344,100 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,372 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez Utau Użytkownik (900 p.)
0 głosów
1 odpowiedź 186 wizyt
0 głosów
2 odpowiedzi 998 wizyt
pytanie zadane 8 grudnia 2018 w C i C++ przez dawid2002 Mądrala (5,190 p.)

92,452 zapytań

141,262 odpowiedzi

319,081 komentarzy

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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...