2013-03-04 15 views
6

Ostatnio dużo czytałem, a jednocześnie obejmując dziedziczenie (i funkcje wirtualne) natknąłem się na słowo kluczowe "inline". Teraz wiem, co jest wbudowane w normalnym znaczeniu - kompilator może zastąpić wywołania funkcji dokładnym kodem. Jednakże, ile razy widziałem, o czym wspomniałem w odniesieniu do dziedziczenia - czy istnieje jakiś szczególny powód, aby używać inline w dziedziczeniu? Nie rozumiem, dlaczego nadal jest wspomniany ....Dziedziczenie i wbudowane?

Jaką dodatkową rolę ma funkcja wbudowana w obrębie dziedziczenia/klas pochodnych/funkcji wirtualnych?

+0

@BillyONeal Nie sądzę, że ten link naprawdę wyjaśnia, czym dokładnie jest połączenie (jeśli takie istnieje). – user997112

+1

Jeszcze raz ... to nie jest duplikat. Pytam, jaki jest link ..... pytanie to pyta, czy wprowadzenie funkcji wirtualnej jest bezcelowe ... To łatwe dla kogoś, kto zna odpowiedź, aby znaleźć pytanie niejasno przypominające odpowiedź - ale to nie " t oznacza to samo. Nie znam odpowiedzi i czytania, że ​​inne pytanie nie pomogło. – user997112

Odpowiedz

2

Tak, korzystanie z wbudowanych funkcji wirtualnych to strata czasu. Funkcja wirtualna musi być wywoływana przez wirtualną tablicę funkcji, która składa się ze wskaźników funkcji. Funkcja inline nie może być wywołana przez wskaźnik. Musi istnieć jako prawdziwa funkcja.

Istnieje kilka wyjątków. Gdy dzwoniący zna dokładny typ obiektu, może całkowicie pominąć tabelę funkcji wirtualnych.

Nadużywanie wirtualnego słowa kluczowego może powodować bardzo powolny kod. Gdzie kompilator może być w stanie wbudować i zoptymalizować trzy lub cztery małe wywołania funkcji, przy funkcjach wirtualnych musi wykonywać rzeczywiste wywołania funkcji, nie przyjmując żadnych założeń dotyczących pamięci ani stanu rejestru między połączeniami.