Come abilitare la compilazione C ++ 17 in Visual Studio?


120

Voglio usare le funzionalità di C ++ 17.

Come posso cambiare la compilazione da C ++ 14 a C ++ 17 in Microsoft Visual Studio?

O non è disponibile nelle versioni di rilascio di VS?


4
Quali caratteristiche di C ++ 17? Quale versione di Visual Studio? Se stai chiedendo informazioni su C ++ 17 perché hai taggato la tua domanda c++11e c++14?
ildjarn

6
c ++ 17 non era disponibile e ho pensato che coloro che sono interessati a versioni specifiche di C ++ sanno meglio come cambiarlo. Ad esempio, voglio che std :: vector.emplace_back () restituisca un riferimento all'elemento appena creato. Conosco quella linea +1 e ottengo quel riferimento, ma vorrei comunque conoscere la risposta alla mia domanda. VS Community 2015 (14.0.25431.01 Update 3)
Tudvari

Probabilmente dovresti controllare qui: blogs.msdn.microsoft.com/visualstudio
Mikel F

3
Non puoi abilitare dialetti linguistici specifici in VS, ottieni tutto ciò che hanno implementato. Potresti avere abbastanza fortuna con le funzionalità della libreria standard votate in C ++ 17 se stai usando VS21015, ma non tanto con le funzionalità del linguaggio.
Pretoriano

1
@preat MSVC 2017 ha un'impostazione "ultima", ma non è ancora stata rilasciata.
Yakk - Adam Nevraumont

Risposte:


162

Ora è disponibile un menu a discesa (almeno da VS 2017.3.5) in cui è possibile selezionare specificamente C ++ 17. Le opzioni disponibili sono (in progetto> Proprietà> C / C ++> Linguaggio> Standard linguaggio C ++)

  • Standard ISO C ++ 14. Opzione della riga di comando msvc:/std:c++14
  • Standard ISO C ++ 17. Opzione della riga di comando msvc:/std:c++17
  • L'ultima bozza di standard. Opzione della riga di comando msvc:/std:c++latest

(Scommetto, una volta che C ++ 20 sarà disponibile e sarà più completamente supportato da Visual Studio /std:c++20)


3
La sintassi -std:c++14, -std:c++17e -std:c++latestfunziona anche, ad esempio quando si preferisce inserire manualmente le opzioni di compilazione (testato con VS2017).
Roi Danton

Non è già chiaro dalla risposta, o intendi specificamente -invece degli /std:interruttori che elenco?
Johan Lundberg

3
Vedo il vantaggio quando provengo da gcco clang. Quindi -è meno invadente (tuttavia la sintassi è ancora leggermente diversa ( :invece di =)).
Roi Danton

In VS 2019, per accedere alle proprietà del progetto, vai a "Esplora soluzioni", fai clic con il pulsante destro del mouse sul titolo del progetto e seleziona Proprietà. Quindi segui le indicazioni di questo post.
BabarBaig

1
@AndreiKrasutski. Non c'è ancora ISO C ++ 20 ma un po 'di supporto in / std: c ++ latest. Lo standard C ++ 20 è previsto per il prossimo anno. Ho modificato in un commento nella mia risposta.
Johan Lundberg

31

MSBuild (progetto / soluzione Visual Studio * .vcproj / *. Sln ) :

Aggiungi a Opzioni aggiuntive in Impostazioni progetto: /std:c++latestper abilitare le funzionalità più recenti - attualmente C ++ 17 a partire da VS2017, VS2015 Update 3.

https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/

/permissive- disabiliterà le estensioni C ++ non standard e abiliterà la conformità standard in VS2017.

https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/

EDIT (ottobre 2018): le ultime funzionalità di VS2017 sono documentate qui:

https://docs.microsoft.com/en-gb/cpp/build/reference/std-specify-language-standard-version

VS2017 supporta: /std:[c++14|c++17|c++latest]ora. Questi flag possono essere impostati tramite le pagine delle proprietà del progetto:

Per impostare questa opzione del compilatore nell'ambiente di sviluppo di Visual Studio

  1. Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per i dettagli, vedere Utilizzo delle proprietà del progetto.
  2. Seleziona Proprietà di configurazione, C / C ++, Lingua.
  3. In C ++ Language Standard, scegli lo standard del linguaggio da supportare dal controllo a discesa, quindi scegli OK o Applica per salvare le modifiche.

CMake :

Visual Studio 2017 (15.7+) supporta i progetti CMake. CMake rende possibile abilitare le moderne funzionalità C ++ in vari modi. L'opzione più semplice è abilitare un moderno standard C ++ impostando la proprietà di un obiettivo in CMakeLists.txt:

add_library (${PROJECT_NAME})
set_property (TARGET ${PROJECT_NAME}
  PROPERTY
    # Enable C++17 standard compliance
    CXX_STANDARD 17
)

Nel caso di una libreria di interfacce:

add_library (${PROJECT_NAME} INTERFACE)
target_compile_features (${PROJECT_NAME}
  INTERFACE
    # Enable C++17 standard compliance
    cxx_std_17
)

Ho fatto il menu a discesa nel mio VS2017 ma il compilatore continua ad applicare lo standard C ++ 98, che diamine
Travis Su


5

Se si porta la soluzione Visual Studio 2015 esistente in Visual Studio 2017 e si desidera crearla con il compilatore nativo c ++ 17, è necessario prima retargetare la soluzione / i progetti alla v141, POI il menu a discesa apparirà come descritto sopra (Proprietà di configurazione -> C / C ++ -> Lingua -> Lingua standard)


2

Versione di Visual Studio 2019:

Il menu a discesa è stato spostato in:

  • Fare clic con il tasto destro sul progetto (non sulla soluzione)
  • Proprietà (o Alt + Invio)
  • Dal menu a sinistra selezionare Proprietà di configurazione
  • Generale
  • Al centro c'è un'opzione chiamata "C ++ Language Standard"
  • Accanto ad esso c'è il menu a discesa
  • Qui puoi selezionare Default, ISO C ++ 14, 17 o più recente
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.