Mam wątpliwości dotyczące funkcji wbudowanych. Funkcje inline nie będą wiązały się z żadnymi wywołaniami funkcji, ale po prostu zastąpią definicję funkcji w dowolnym miejscu, w którym wykonywane jest wywołanie funkcji inline. Funkcje inline mają wymuszenie typu w przeciwieństwie do makr. Co się stanie, jeśli funkcje rekurencyjne zostaną wprowadzone w linii?Co się stanie, jeśli funkcje rekursywne będą wstawiane jako wbudowane?
Odpowiedz
"inline" nie jest gwarancją, to prośba.
Funkcja rekursywna inline nie będzie (zazwyczaj) inline.
- Ponieważ niektóre komentujÄ podkreślić, że są szczególnych przypadkach (na przykład przy użyciu kompilatora pragma specyficzną), w którym inline jest możliwe.
Tylko dlatego, że jest rekursywna, nie znaczy, że Twój kompilator nie będzie wbudowany: http://msdn.microsoft.com/en-us/library/69hzy453(v=vs.80).aspx – SecurityMatt
poprawić odpowiedź, z linkiem podanym przez @SecurityMatt, tak większość kompilatorów nie wstawia funkcji rekursywnych, ale niektórzy robią .... przeczytaj też mój komentarz do pytania. –
inline
jest jedynie sugestią dla kompilatora i nie gwarantuje, że funkcja będzie inline.
Oczywiście kompilator nie będzie w stanie wstawiać funkcji rekursywnej w nieskończoność. Może wcale nie wprowadzać go do linii lub może wprowadzać go na głębokość zaledwie kilku poziomów.
[Tak mało możliwy poziom w kompilatorze firmy Microsoft] (http://wiki.answers.com/Q/What_is_inline_function_in_C_Can_you_make_inline_function_recursive_or_not_If_make_can_complier_will_compile_that_code) Po prostu lubisz udostępniać link –
- 1. Co się stanie, jeśli zapomnę zamknąć zestaw?
- 2. Co się stanie, jeśli dwukrotnie zwolnię funkcję ReleaseMutex()?
- 3. Funkcje wbudowane
- 4. Co się stanie, jeśli konstruktor zgłasza wyjątek?
- 5. Funkcje wbudowane w C++
- 6. Co się stanie, jeśli wygaśnie mój certyfikat dystrybucji?
- 7. Co się stanie, jeśli zmieni się obiekt __hash__?
- 8. Co się stanie, jeśli konstruktor shared_ptr zakończy się niepowodzeniem?
- 9. Co się stanie, jeśli program sterownika się zawiesi?
- 10. Co stanie się z Braintree.js, jeśli JavaScript jest wyłączony?
- 11. Wylicza WCF, co się stanie, jeśli nie oznaczę członków jako EnumMember?
- 12. Czy te funkcje są rekursywne?
- 13. Funkcje rekursywne w wyrażeniach obliczeniowych
- 14. W języku C++, co się stanie, jeśli dwie różne funkcje zadeklarują tę samą zmienną statyczną?
- 15. Co się stanie, jeśli zadzwonię wait na zmienną warunku powiadomienia
- 16. Co się stanie, jeśli obiekt zmieni rozmiar własnego kontenera?
- 17. Co się stanie, jeśli chcę zapisać wartość None w memcache?
- 18. Co się stanie, jeśli usuniesz spację między operatorami + i ++?
- 19. Jeśli używam dokumentu w formacie HTML 5, co się stanie?
- 20. Co stanie się, jeśli nie zamkniesz uchwytu pliku w Perlu?
- 21. Co się stanie, jeśli wywołam Dispose() przed użyciem zakończenia instrukcji?
- 22. Co się stanie, jeśli użyję "rzutu"; bez wyjątku do rzutu?
- 23. co się stanie, jeśli usunę bazę danych information_schema z mySQL?
- 24. co się stanie, jeśli przekażę strukturę do funkcji vararg?
- 25. co się stanie, jeśli użyjesz belongs_to bez odpowiedniego has_one?
- 26. Co się stanie, jeśli klasa nie ma udokumentowanego wyznaczonego inicjatora?
- 27. Co się stanie, jeśli segment uzgadniania połączenia TCP zostanie utracony?
- 28. Co się stanie, jeśli zaimplementuję klasę w pliku nagłówkowym?
- 29. Co się stanie, jeśli niepoprawny adres zostanie uprzednio pobrany?
- 30. Co się stanie, jeśli lambda zostanie przeniesiona/zniszczona podczas działania?
Prawdopodobny duplikat http://stackoverflow.com/questions/190232/can-a-recursive-function-be-inline – SecurityMatt
@SecurityMatt może być następnym razem będę bardziej ostrożny. Dziękuję Ci. –
odpowiedź nieparzysta, ale: wiele kompilatorów może również wstawiać rozwinąć niektóre funkcje rekursywne; Implementacja Microsoft nie będzie wstawiać funkcji rekursywnych, chyba że mają linię #pragma inline depth (n), która określa maksymalną głębokość wnikania, jaką funkcja będzie miała. –