Jak włączyć kompilację C ++ 17 w programie Visual Studio?

120

Chcę używać funkcji C ++ 17.

Jak mogę przełączyć kompilację z C ++ 14 na C ++ 17 w Microsoft Visual Studio?

A może nie jest dostępny w wydaniu VS?

Tudvari
źródło
4
Jakie funkcje C ++ 17? Która wersja programu Visual Studio? Jeśli pytasz o C ++ 17, dlaczego otagowałeś swoje pytanie c++11i c++14?
ildjarn
6
c ++ 17 nie był dostępny i pomyślałem, że ci, którzy są zainteresowani konkretnymi wersjami C ++, wiedzą lepiej, jak to zmienić. Na przykład chcę, aby std :: vector.emplace_back () zwróciło odniesienie do nowo utworzonego elementu. Znam tę linię +1 i otrzymuję to odniesienie, ale mimo wszystko chciałbym poznać odpowiedź na moje pytanie. VS Community 2015 (14.0.25431.01 Update 3)
Tudvari
Prawdopodobnie powinieneś sprawdzić tutaj: blogs.msdn.microsoft.com/visualstudio
Mikel F
3
Nie możesz włączyć określonych dialektów językowych w VS, dostajesz wszystko, co zaimplementowały. Możesz mieć szczęście ze standardowymi funkcjami biblioteki głosowanymi na C ++ 17, jeśli używasz VS21015, ale nie tak bardzo z funkcjami językowymi.
Praetorian,
1
@preat MSVC 2017 ma „najnowsze” ustawienie, które nie zostało jeszcze wydane.
Yakk - Adam Nevraumont

Odpowiedzi:

162

Jest teraz lista rozwijana (przynajmniej od wersji VS 2017.3.5), w której można konkretnie wybrać C ++ 17. Dostępne opcje to (w projekcie> Właściwości> C / C ++> Język> C ++ Standard języka)

  • Standard ISO C ++ 14. opcja wiersza poleceń msvc:/std:c++14
  • Standard ISO C ++ 17. opcja wiersza poleceń msvc:/std:c++17
  • Najnowszy projekt standardu. opcja wiersza poleceń msvc:/std:c++latest

(Założę się, że gdy C ++ 20 wyjdzie i będzie w pełni obsługiwany przez Visual Studio /std:c++20)

Johan Lundberg
źródło
3
Składnia -std:c++14, -std:c++17a -std:c++latesttakże działa np. Gdy wolisz ręcznie wpisywać opcje kompilatora (testowane z VS2017).
Roi Danton
Czy nie wynika to już z odpowiedzi, czy konkretnie masz na myśli -zamiast wymienionych /std:przełączników?
Johan Lundberg
3
Widzę korzyści płynące z gcclub clang. Wtedy -jest mniej inwazyjny (jednak składnia nadal nieznacznie się różni ( :zamiast =)).
Roi Danton
W programie VS 2019, aby przejść do właściwości projektu, przejdź do „Eksploratora rozwiązań”, kliknij prawym przyciskiem myszy tytuł projektu i wybierz opcję Właściwości. Następnie postępuj zgodnie ze wskazówkami zawartymi w tym poście.
BabarBaig
1
@AndreiKrasutski. Nie ma jeszcze ISO C ++ 20, ale pewne wsparcie w / std: c ++ najnowsze. Standard C ++ 20 jest oczekiwany w przyszłym roku. Redagowałem w komentarzu do mojej odpowiedzi.
Johan Lundberg
31

MSBuild (projekt / rozwiązanie programu Visual Studio * .vcproj / *. Sln ) :

Dodaj do dodatkowych opcji w ustawieniach projektu: /std:c++latestaby włączyć najnowsze funkcje - obecnie C ++ 17 od VS2017, VS2015 Update 3.

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

/permissive- wyłączy niestandardowe rozszerzenia C ++ i włączy zgodność ze standardami w VS2017.

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

EDYCJA (październik 2018): Najnowsze funkcje VS2017 są udokumentowane tutaj:

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

VS2017 obsługuje: /std:[c++14|c++17|c++latest]teraz. Te flagi można ustawić na stronach właściwości projektu:

Aby ustawić tę opcję kompilatora w środowisku programistycznym programu Visual Studio

  1. Otwórz okno dialogowe strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Praca z właściwościami projektu.
  2. Wybierz Właściwości konfiguracji, C / C ++, język.
  3. W C ++ Language Standard wybierz z rozwijanego menu standard językowy do obsługi, a następnie wybierz OK lub Zastosuj, aby zapisać zmiany.

CMake :

Program Visual Studio 2017 (15.7+) obsługuje projekty CMake. CMake umożliwia włączanie nowoczesnych funkcji C ++ na różne sposoby. Najbardziej podstawową opcją jest włączenie nowoczesnego standardu C ++ poprzez ustawienie właściwości celu w CMakeLists.txt:

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

W przypadku biblioteki interfejsów:

add_library (${PROJECT_NAME} INTERFACE)
target_compile_features (${PROJECT_NAME}
  INTERFACE
    # Enable C++17 standard compliance
    cxx_std_17
)
Zingam
źródło
Zrobiłem listę rozwijaną w moim VS2017, ale kompilator nadal stosuje standard C ++ 98, co do cholery
Travis Su
5

Jeśli przenosisz istniejące rozwiązanie Visual Studio 2015 do Visual Studio 2017 i chcesz je skompilować za pomocą natywnego kompilatora c ++ 17, powinieneś najpierw ponownie skierować rozwiązanie / projekty do wersji 141, a następnie lista rozwijana pojawi się zgodnie z opisem powyżej (Właściwości konfiguracji -> C / C ++ -> Język -> Standard języka)

WilliamClements
źródło
2

Wersja programu Visual Studio 2019:

Rozwijane menu zostało przeniesione do:

  • Kliknij prawym przyciskiem myszy projekt (nie rozwiązanie)
  • Właściwości (lub Alt + Enter)
  • Z menu po lewej stronie wybierz Właściwości konfiguracji
  • Generał
  • W środku znajduje się opcja „C ++ Language Standard”
  • Obok znajduje się rozwijane menu
  • Tutaj możesz wybrać Domyślne, ISO C ++ 14, 17 lub najnowsze
sanitizedUser
źródło