Co to znaczy, że kompilator używa wyszukiwania dwufazowego do kompilacji klasy szablonów?Wyszukiwanie dwufazowe - potrzebne wyjaśnienie
Odpowiedz
Szablony są kompilowane (conajmniej) dwukrotnie:
Bez instancji sam kod szablonu jest sprawdzana pod kątem składni.
Np jakieś błędy składniowe błędy takie jak;
itpW momencie konkretyzacji (gdy dokładny rodzaj jest znany), kod szablonu jest sprawdzany ponownie, aby upewnić się wszystkie połączenia są ważne dla danego typu.
Np .: Szablon może wywoływać funkcje, które mogą nie być obecne dla danego typu.
Jest to tak zwane wyszukiwanie dwufazowe jako .
Należy również zwrócić uwagę, że wyszukiwanie nazw niezależnych jest wykonywane w pierwszej fazie, natomiast wyszukiwanie nazw zależnych od parametru szablonu odbywa się w drugim etapie. faza. Istotne jest to, że jeśli wywołasz 'sqrt (1)', to 'sqrt' musi zostać zadeklarowane przed zdefiniowaniem szablonu. Ale jeśli wywołasz 'sqrt (t)', gdzie 't' jest instancją typu będącego parametrem szablonu,' sqrt' nie musi być widoczny, dopóki nie zostanie utworzony instancja szablonu. MSVC nie użył tego poprawnie: może nie dla wszystkich, których znam. –
W każdym razie dlatego nazywa się to przeglądaniem dwufazowym *, a nie tylko dwufazową kompilacją lub czymś podobnym. Pierwsza faza ma zrobić coś więcej niż tylko sprawdzenie składni, ale MS miało trudności z zaimplementowaniem pierwszej fazy wyszukiwania, więc po prostu zrobili to wszystko podczas tworzenia instancji: http://stackoverflow.com/questions/6273176/what-exactly-is -broken-with-microsoft-visual-cs-dwufazowy-szablon-instantia –
@SteveJessop: Brzmi bardziej jak to - klucz jest "lookup" część dwufazowego wyszukiwania. Dzięki! –
- 1. #ifdef i wyjaśnienie potrzebne
- 2. First Responder Wyjaśnienie Potrzebne
- 3. Na System.out, wyjaśnienie potrzebne
- 4. Pętla zdarzeń JavaScript. Wyjaśnienie potrzebne
- 5. Przejść według "wartości referencyjnej"? Potrzebne pewne wyjaśnienie
- 6. Obsługa bezpiecznych varargów w Javie 6 i 7, potrzebne wyjaśnienie
- 7. Wyjaśnienie i wykorzystanie jsonp
- 8. wyjaśnienie potrzebne o ósmej czynnik manifestu Dwunastu-Factor App i daemonized procesy
- 9. Czy usługa Azure SQL Database obsługuje zatwierdzanie dwufazowe (2PC)?
- 10. Wyjaśnienie NSLayoutAttribute
- 11. shutil.rmtree() wyjaśnienie
- 12. glVertexAttribPointer wyjaśnienie
- 13. Wyjaśnienie: register_shutdown_function
- 14. Wyjaśnienie ikona
- 15. Wyjaśnienie Func
- 16. JavaScript Objaśnienie prototypowe potrzebne
- 17. Kiedy potrzebne jest NSCopying?
- 18. Wyjaśnienie do Android Xfermode
- 19. Dalsze wyjaśnienie dotyczące IntentService
- 20. Wyjaśnienie działania spisu?
- 21. Wyjaśnienie witryny wywoławczej?
- 22. Podkreślenie _.reduce wyjaśnienie?
- 23. Wyjaśnienie java.sql.SQLException: Już zamknięte
- 24. Proste wyjaśnienie losowego lasu
- 25. Wyjaśnienie błędów TypeScript Linter
- 26. snprintf i sprintf wyjaśnienie
- 27. Wyjaśnienie odniesień w C++
- 28. Wyjaśnienie int? vs int
- 29. Algorytm Chaitin-Briggs wyjaśnienie
- 30. SPOJ: wyjaśnienie rozwiązania M3TILE
@Nawaz Słyszałem tylko o dwóch fazach wyszukiwania, czy jest coś, czego mi brakuje? – smallB
Krótki i przydatny artykuł na ten temat można znaleźć na stronie http://blog.llvm.org/2009/12/dreaded-two-phase-name-lookup.html –
Zobacz także http://stackoverflow.com/a/10171507/76722 i http://stackoverflow.com/a/7241548/76722 –