Załóżmy, że deklaruję szablon, ale nigdy go nie odwołuję w C++. Czy kompilator robi cokolwiek z nim w pliku wykonywalnym? Czy zajmuje dowolną pamięć procesową?Czy szablon C++ używa pamięci, jeśli nigdy nie jest do niej odwoływana?
Odpowiedz
Nie, kod nie zostanie wygenerowany dla szablonu funkcji, który nigdy nie jest tworzony. Ponadto, nie zostanie utworzony kod dla funkcji szablonu bez szablonu, która nigdy nie jest wywoływana.
W szczególności, rozmiar twojego pliku wykonywalnego nie będzie większy, ani nie wystąpi narzut w czasie wykonywania.
(o ile nie zostanie jawnie utworzony szablon klasy) – aschepler
Nie, nie ma.
Klasy szablonów i funkcje nie są rzeczywistymi klasami lub funkcjami: zamiast tego są instrukcjami dla kompilatora, jak generować określone typy klas i funkcji. Kiedy odwołujesz się do szablonu, kompilator używa szablonu, aby dowiedzieć się, jak wygenerować kod źródłowy, i kompiluje wygenerowany kod, raz dla każdej innej parametryzacji szablonu.
Jedyny narzut na korzystanie z szablonu to trochę więcej czasu na kompilację, nic wielkiego dla jakiegokolwiek komputera zbudowanego w dowolnym czasie po 1980 roku.
OK dzięki, że ma sens – Iowa15
- 1. Tłumienie "nigdy nie jest używane" i "nigdy nie jest przypisane do" ostrzeżeń w C#
- 2. szablon włącz jeśli jest wskaźnikiem
- 3. Czy file_get_contents używa pamięci podręcznej?
- 4. Przeciek pamięci w iOS, AVPlayer nigdy nie jest wycofywany
- 5. Odwoływana biblioteka DLL nie jest kopiowana do projektu odwoływania się
- 6. Dynamiczne dodawanie skryptu do strony z jQuery nigdy nie używa pliku z pamięci podręcznej.
- 7. Application.ThreadException: wyciek pamięci, jeśli nie jest odłączony?
- 8. Czy nie można stwierdzić, czy funkcja jest funkcją generującą, jeśli wywołano na niej funkcję .bind()?
- 9. Czy muszę wywoływać wycofywanie, jeśli nigdy nie zatwierdzam?
- 10. AVPlayer nigdy nie jest gotowy do gry
- 11. Szablon nie jest renderowany
- 12. WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION nigdy nie jest zwolniony
- 13. IMetadataAware.OnMetadataCreated nigdy nie jest nazywane
- 14. Czy jest możliwe, aby formant WPF miał ActualWidth i ActualHeight, jeśli nigdy nie był renderowany?
- 15. Skaner nigdy nie jest zamknięty
- 16. Dlaczego szablon typedef jest problemem w C++ (nie C++ 11)
- 17. onFinishInflate() nigdy nie jest wywoływana
- 18. Znajdź, jeśli pole tekstowe jest wyłączone lub nie używa jquery
- 19. shouldStartLoadWithRequest nigdy nie jest nazywane
- 20. Clojure "jeśli" nigdy nie ocenia swojego trzeciego argumentu.
- 21. onIabPurchaseFinishedListener nigdy nie jest wywoływany
- 22. Ile pamięci używa tablica HashTable?
- 23. Ile pamięci używa Nashorn ScriptEngine?
- 24. MongoDB używa zbyt dużo pamięci
- 25. Jak ustalić, czy matematyka C używa SSE2?
- 26. W .NET, czy finalizator może być uruchomiony, nawet jeśli konstruktor obiektu nigdy nie działał?
- 27. Czy document.createElement ("") nigdy się nie powiedzie?
- 28. Szablon szablonów C++ (podwójny szablon?)
- 29. Kod nigdy nie widziałam w C++ 11
- 30. Co może pójść źle, jeśli cout.rdbuf() jest używane do przełączania bufora i nigdy go nie przywraca?
Nie (15 znaków) – user7116