Wie aktiviere ich das Kompilieren von C ++ 17 in Visual Studio?

120

Ich möchte C ++ 17-Funktionen verwenden.

Wie kann ich das Kompilieren von C ++ 14 auf C ++ 17 in Microsoft Visual Studio umstellen?

Oder ist es in Release-Versionen von VS nicht verfügbar?

Tudvari
quelle
4
Welche C ++ 17-Funktionen? Welche Version von Visual Studio? Wenn Sie nach C ++ 17 fragen, warum haben Sie Ihre Frage markiert c++11und c++14?
ildjarn
6
c ++ 17 war nicht verfügbar, und ich dachte, dass diejenigen, die an bestimmten Versionen von C ++ interessiert sind, besser wissen, wie man es wechselt. Zum Beispiel möchte ich, dass std :: vector.emplace_back () einen Verweis auf das neu erstellte Element zurückgibt. Ich kenne diese +1 Zeile und bekomme diese Referenz, aber ich möchte trotzdem die Antwort auf meine Frage wissen. VS Community 2015 (14.0.25431.01 Update 3)
Tudvari
Sie sollten wahrscheinlich hier überprüfen: blogs.msdn.microsoft.com/visualstudio
Mikel F
3
Sie können bestimmte Sprachdialekte in VS nicht aktivieren. Sie erhalten alles, was sie implementiert haben. Wenn Sie VS21015 verwenden, haben Sie möglicherweise ziemlich viel Glück mit Standardbibliotheksfunktionen, die in C ++ 17 gewählt wurden, aber nicht so sehr mit Sprachfunktionen.
Prätorianer
1
@preat MSVC 2017 hat eine "neueste" Einstellung, die jedoch noch nicht veröffentlicht wurde.
Yakk - Adam Nevraumont

Antworten:

161

Es gibt jetzt eine Dropdown-Liste (mindestens seit VS 2017.3.5), in der Sie speziell C ++ 17 auswählen können. Die verfügbaren Optionen sind (unter Projekt> Eigenschaften> C / C ++> Sprache> C ++ Sprachstandard)

  • ISO C ++ 14 Standard. msvc Befehlszeilenoption:/std:c++14
  • ISO C ++ 17 Standard. msvc Befehlszeilenoption:/std:c++17
  • Der neueste Standardentwurf. msvc Befehlszeilenoption:/std:c++latest

(Ich wette, sobald C ++ 20 verfügbar ist und von Visual Studio besser unterstützt wird, wird es sein /std:c++20)

Johan Lundberg
quelle
3
Die Syntax -std:c++14, -std:c++17und -std:c++latestfunktioniert auch, zum Beispiel , wenn Sie es vorziehen , manuell zu Compiler - Optionen eingeben (getestet mit VS2017).
Roi Danton
Ist das nicht schon aus der Antwort klar oder meinst du konkret -statt der /std:Schalter, die ich aufführe?
Johan Lundberg
3
Ich sehe den Vorteil, wenn ich von gccoder komme clang. Dann -ist das weniger aufdringlich (die Syntax unterscheidet sich jedoch immer noch geringfügig ( :anstelle von =)).
Roi Danton
Um in VS 2019 zu den Projekteigenschaften zu gelangen, rufen Sie "Projektmappen-Explorer" auf, klicken Sie mit der rechten Maustaste auf den Projekttitel und wählen Sie "Eigenschaften". Folgen Sie dann den Anweisungen dieses Beitrags.
BabarBaig
1
@AndreiKrasutski. Es gibt noch kein ISO C ++ 20, aber einige Unterstützung in / std: c ++ spätestens. Der C ++ 20-Standard wird nächstes Jahr erwartet. Ich habe in einem Kommentar in meiner Antwort bearbeitet.
Johan Lundberg
31

MSBuild (Visual Studio-Projekt / -Lösung * .vcproj / *. Sln ) :

Zu zusätzlichen Optionen in den Projekteinstellungen hinzufügen: /std:c++latestZum Aktivieren der neuesten Funktionen - derzeit C ++ 17 ab VS2017, VS2015 Update 3.

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

/permissive- Deaktiviert nicht standardmäßige C ++ - Erweiterungen und aktiviert die Standardkonformität in VS2017.

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

EDIT (Okt 2018): Die neuesten VS2017-Funktionen sind hier dokumentiert:

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

VS2017 unterstützt: /std:[c++14|c++17|c++latest]jetzt. Diese Flags können über die Eigenschaftenseiten des Projekts gesetzt werden:

So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen finden Sie unter Arbeiten mit Projekteigenschaften.
  2. Wählen Sie Konfigurationseigenschaften, C / C ++, Sprache.
  3. Wählen Sie in C ++ Language Standard den zu unterstützenden Sprachstandard aus dem Dropdown-Steuerelement aus und wählen Sie dann OK oder Übernehmen, um Ihre Änderungen zu speichern.

CMake :

Visual Studio 2017 (15.7+) unterstützt CMake-Projekte. CMake ermöglicht es, moderne C ++ - Funktionen auf verschiedene Arten zu aktivieren. Die einfachste Option besteht darin, einen modernen C ++ - Standard zu aktivieren, indem die Eigenschaft eines Ziels in CMakeLists.txt festgelegt wird:

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

Im Fall einer Schnittstellenbibliothek:

add_library (${PROJECT_NAME} INTERFACE)
target_compile_features (${PROJECT_NAME}
  INTERFACE
    # Enable C++17 standard compliance
    cxx_std_17
)
Zingam
quelle
Ich habe das Dropdown-Menü in meinem VS2017 erstellt, aber der Compiler wendet weiterhin den C ++ 98-Standard an, was zum Teufel
Travis Su
5

Wenn Sie eine vorhandene Visual Studio 2015-Lösung in Visual Studio 2017 einbinden und diese mit dem nativen C ++ 17-Compiler erstellen möchten, sollten Sie zuerst die Lösung / Projekte auf v141 neu ausrichten. DANN wird die Dropdown-Liste wie oben beschrieben angezeigt (Konfigurationseigenschaften -> C. / C ++ -> Sprache -> Sprachstandard)

WilliamClements
quelle
2

Visual Studio 2019 Version:

Das Dropdown-Menü wurde verschoben zu:

  • Rechtsklick auf Projekt (keine Lösung)
  • Eigenschaften (oder Alt + Eingabetaste)
  • Wählen Sie im linken Menü Konfigurationseigenschaften
  • Allgemeines
  • In der Mitte gibt es eine Option namens "C ++ Language Standard"
  • Daneben befindet sich das Dropdown-Menü
  • Hier können Sie Standard, ISO C ++ 14, 17 oder Neueste auswählen
sanitizedUser
quelle