Che cosa significa che il compilatore sta utilizzando la ricerca a due fasi per compilare la classe template?Ricerca a due fasi - spiegazione necessaria
risposta
modelli sono compilati (almeno) due volte:
Senza la creazione di istanze del codice modello stesso viene verificata la sintassi.
Es: Eventuali errori di sintassi errori come;
eccAl momento della istanziazione (quando il tipo esatto è noto), il codice del modello viene nuovamente controllata per garantire tutte le chiamate sono valide per quel tipo particolare.
Ad esempio: il modello potrebbe richiamare chiamate a funzioni che potrebbero non essere presenti per quel particolare tipo.
Si chiama Ricerca in due fasi.
Si noti inoltre che la ricerca di nomi non dipendenti viene eseguita nella prima fase, mentre la ricerca di nomi che dipendono da un parametro di modello viene eseguita nel secondo fase. Il significato è che se si chiama 'sqrt (1)', allora 'sqrt' deve essere dichiarato prima che il modello sia definito. Ma se chiamate 'sqrt (t)', dove 't' è un'istanza di un tipo che è un parametro template, quindi' sqrt' non deve essere visibile fino a quando il modello non viene istanziato. MSVC non era abituato a farlo correttamente: potrebbe non esserlo per quello che so. –
Ad ogni modo, è per questo che si chiama ricerca in due fasi * rispetto alla compilazione in due fasi o qualcosa del genere. La prima fase dovrebbe fare molto di più che controllare la sintassi, ma MS ha avuto qualche difficoltà nell'implementazione della prima fase di ricerca, quindi hanno fatto tutto ciò che è stato necessario per la creazione di istanze: http://stackoverflow.com/questions/6273176/what-exactly-is -broken-con-microsoft-visual-cs-modello-a due fasi-instantia –
@SteveJessop: Sembra più simile a questo: la chiave è la parte "ricerca" della ricerca a due fasi. Grazie! –
- 1. CGPointMake necessaria spiegazione?
- 2. Pagerank e la sua matematica: Spiegazione necessaria
- 3. Spiegazione di regex Python necessaria - $ character usage
- 4. Java uscita frammento di codice necessaria spiegazione
- 5. È necessaria la spiegazione del deadlock Mysql
- 6. Objective C costruzione di oggetti a due fasi
- 7. Come funziona un callback around_action? Una spiegazione è necessaria
- 8. Spiegazione necessaria per un caso UTF-8 vs cpp
- 9. Spiegazione della media sicurezza di due numeri
- 10. OAuth a due vie - ricerca di informazioni
- 11. Con SonataAdminBundle. Configurare filtro su un'entità correlata in due fasi
- 12. Regex (grep) per la ricerca su più righe necessaria
- 13. Il commit a due fasi protegge da errori di commit finali?
- 14. I puntatori intelligenti precludono la necessità di una costruzione a due fasi?
- 15. Il database SQL di Azure supporta il commit a due fasi (2PC)?
- 16. Impegno a due fasi - Come utilizzare la mia coda in modo efficace?
- 17. Elaborazione a due fasi: non emette tag vuoti dall'elaborazione XSLT 2.0 phase-1
- 18. Spiegazione dei puntatori a funzione
- 19. Creazione della registrazione a più fasi in iOS
- 20. Rimuovere semplici tag HTML da String in Oracle tramite RegExp, Spiegazione necessaria
- 21. Algoritmo FASTA Spiegazione
- 22. Spiegazione di due argomenti per il metodo jQuery .each()
- 23. Spiegazione dell'operatore di due punti in ": $ {foo = valore}"
- 24. Come rendere necessaria una proprietà in base a più condizioni?
- 25. ADOX Errori generati dall'operazione OLE DB a più fasi
- 26. Spiegazione di matrici annidate a un programmatore
- 27. .NET4: spiegazione side-by-side in corso Spiegazione
- 28. Spiegazione di NSIncrementalStore in italiano semplice
- 29. [^ /] + spiegazione .htaccess
- 30. Spiegazione di Doctype Sintassi
@Nawaz Ho sentito solo due fasi di ricerca, c'è qualcosa che mi manca? – smallB
Un breve e utile articolo sull'argomento è disponibile su http://blog.llvm.org/2009/12/dreaded-two-phase-name-lookup.html –
Vedere anche http://stackoverflow.com/a/10171507/76722 e http://stackoverflow.com/a/7241548/76722 –