Una delle molte differenze chiave tra i compilatori C++ GCC & MSVC è che nel primo tutti i simboli di una libreria condivisa vengono esportati per impostazione predefinita, mentre MSVC non esporta nulla.Qual è la logica di progettazione tra GCC che esporta tutti i simboli per impostazione predefinita e MSVC non esporta nulla per impostazione predefinita?
Alcune implicazioni sono che in, in MSVC, è necessario esportare classi di modelli istanziati di explict.
Mentre ho accettato questo come un dato di fatto, mi chiedevo quali sono le implicazioni del design, i compromessi, dal punto di vista del progettista di compilatori, ecc. Di ciascun approccio?
Il comportamento di GCC è stato quasi certamente scelto per la compatibilità con i compilatori UNIX esistenti. La specifica [ELF] (http://en.wikipedia.org/wiki/Executable_and_Linkable_Format) dice che i simboli hanno visibilità globale per impostazione predefinita. Questo è il comportamento tradizionale del linguaggio C: i simboli sono globali a meno che non vengano dichiarati 'static'. –