2015-03-09 14 views
8

In this web page, il supporto GCC per lo standard ISO C++ 14 è definito "experimental".GCC è pronto per il codice di produzione C++ 14?

Dal momento mi piacerebbe utilizzare alcune delle C++ 14 di miglioramenti su C++ 11 (ad esempio std::make_unique e lambda generica) nel mio codice C++, io sono sicuro nella utilizzando l'opzione -std=c++14 con GCC 4.9 per il codice di produzione , o il tipo di stato corrente di GCC/C++ 14 è simile a "beta" e quindi GCC/C++ 14 non è pronto per il codice di produzione?

+2

IMO, non può essere pronto fino al completamento del supporto C++ 11 (ad esempio: codecvt, et al). – Brandon

+1

Questo potrebbe essere utile - [GCC C++ 2014 Implementation Status] (https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2014) –

+0

@Brandon: Penso che gli sviluppatori GCC potrebbero target C++ 14 nel suo complesso, invece di separare le parti C++ 11 da C++ 14, ad es se ci sono funzionalità utili in C++ 14, queste potrebbero essere prioritarie rispetto a funzioni meno utili di C++ 11. D'altra parte, anche se cose come codecvt et al. non sono finiti, considereresti GCC pronto per il codice C++ 11 di qualità di produzione? –

risposta

5

è un tipo di stato GCC/C++ 14 simile a "beta" e quindi GCC/C++ 14 non è pronto per il codice di produzione?

Dipende dalle funzioni utilizzate. make_unique è molto semplice, è facile da implementare e dovrebbe essere sicuro.

Alcune delle altre nuove funzionalità (in particolare le funzionalità del linguaggio di base) hanno richiesto molto più lavoro da implementare e potrebbero avere più bug in attesa di essere trovati e risolti.

Quindi non c'è una sola risposta "è pronta" o "non è pronta".

Tuttavia, una cosa importante da tenere presente è che, sebbene sia ancora etichettato come sperimentale, non esiste alcun tentativo di mantenere la compatibilità con le versioni precedenti tra GCC 4.xe GCC 5, ad esempio. Quindi se hai codice C++ 11 compilato con GCC 4.8, devi ricompilare tutto se vuoi collegarti ad altri oggetti C++ 11/C++ 14 costruiti con 4.9, e similmente se/quando ti sposti a GCC 5 : ricompila tutti gli oggetti che usano C++ 11 o C++ 14 (perché tipi come std::tuple hanno cambiato il layout dei dati in GCC 5).

Per il codice C++ 03 non cambiamo le definizioni tra le versioni, quindi sono stabili.

+0

Penso che lo stesso valga anche per altri compilatori come MSVC :) BTW, cambiare il layout dei dati non è un problema: è molto comune per MSVC (hanno cambiato il layout dei dati per diverse classi STL tra diverse versioni di Visual Studio). –

+0

@ Mr.C64, non è un problema _per MSVC_. Ma ti prometto che è un grosso problema per molti utenti GCC, motivo per cui GCC non ha cambiato il suo ABI C++ da GCC 3.4 –

+0

Incredibile! Se ho capito correttamente quello che hai scritto, è un po 'come MSVC non ha modificato C++ ABI (ad esempio layout di classe STL) _since VS2005! _ :) –

Problemi correlati