Bagaimana cara mengaktifkan C ++ 17 kompilasi di Visual Studio?

120

Saya ingin menggunakan fitur C ++ 17.

Bagaimana cara beralih kompilasi dari C ++ 14 ke C ++ 17 di Microsoft Visual Studio?

Atau tidak tersedia dalam versi rilis VS?

Tudvari
sumber
4
Fitur C ++ 17 yang mana? Versi Visual Studio yang mana? Jika Anda bertanya tentang C ++ 17 mengapa Anda menandai pertanyaan Anda c++11dan c++14?
ildjarn
6
c ++ 17 tidak tersedia, dan saya pikir mereka yang tertarik dengan versi tertentu dari C ++ tahu lebih baik bagaimana cara mengubahnya. Misalnya saya ingin std :: vector.emplace_back () mengembalikan referensi ke elemen yang baru dibuat. Saya tahu baris +1 itu, dan saya mendapatkan referensi itu, Tapi saya ingin tahu jawaban dari pertanyaan saya. VS Community 2015 (14.0.25431.01 Pembaruan 3)
Tudvari
Anda mungkin harus memeriksa di sini: blogs.msdn.microsoft.com/visualstudio
Mikel F
3
Anda tidak dapat mengaktifkan dialek bahasa tertentu di VS, Anda mendapatkan apa pun yang telah mereka terapkan. Anda mungkin cukup beruntung dengan fitur pustaka standar yang dipilih ke C ++ 17 jika Anda menggunakan VS21015, tetapi tidak begitu banyak dengan fitur bahasa.
Praetorian
1
@preat MSVC 2017 memiliki pengaturan "terbaru", tapi itu belum dirilis.
Yakk - Adam Nevraumont

Jawaban:

162

Sekarang ada drop-down (setidaknya sejak VS 2017.3.5) di mana Anda dapat secara khusus memilih C ++ 17. Opsi yang tersedia adalah (di bawah project> Properties> C / C ++> Language> C ++ Language Standard)

  • Standar ISO C ++ 14. opsi baris perintah pnidui:/std:c++14
  • Standar ISO C ++ 17. opsi baris perintah pnidui:/std:c++17
  • Standar draf terbaru. opsi baris perintah pnidui:/std:c++latest

(Saya yakin, setelah C ++ 20 keluar dan lebih didukung oleh Visual Studio itu akan /std:c++20)

Johan Lundberg
sumber
3
Sintaksnya -std:c++14, -std:c++17dan -std:c++latestjuga berfungsi, misalnya ketika Anda lebih suka memasukkan opsi kompilator secara manual (diuji dengan VS2017).
Roi Danton
Apakah itu belum jelas dari jawabannya, atau apakah yang Anda maksud secara khusus -daripada /std:sakelar yang saya daftar?
Johan Lundberg
3
Saya melihat manfaatnya jika berasal dari gccatau clang. Maka -itu kurang mengganggu (namun sintaksnya masih sedikit berbeda ( :bukan =)).
Roi Danton
Di VS 2019, untuk masuk ke Project Properties, buka "Solution Explorer", klik kanan pada judul proyek dan pilih Properties. Kemudian ikuti petunjuk dari posting ini.
BabarBaig
1
@Andreirasutsuts. Belum ada ISO C ++ 20 tetapi beberapa dukungan di / std: c ++ terbaru. Standar C ++ 20 diharapkan tersedia tahun depan. Saya diedit dalam komentar di jawaban saya.
Johan Lundberg
31

MSBuild (proyek / solusi Visual Studio * .vcproj / *. Sln ) :

Tambahkan ke opsi Tambahan di Pengaturan Proyek: /std:c++latestuntuk mengaktifkan fitur terbaru - saat ini C ++ 17 pada VS2017, VS2015 Pembaruan 3.

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

/permissive- akan menonaktifkan ekstensi C ++ non-standar dan akan mengaktifkan kesesuaian standar di VS2017.

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

EDIT (Okt 2018): Fitur VS2017 terbaru didokumentasikan di sini:

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

VS2017 mendukung: /std:[c++14|c++17|c++latest]sekarang. Bendera ini dapat disetel melalui halaman properti proyek:

Untuk mengatur opsi kompiler ini di lingkungan pengembangan Visual Studio

  1. Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Bekerja dengan Properti Proyek.
  2. Pilih Properti Konfigurasi, C / C ++, Bahasa.
  3. Di C ++ Language Standard, pilih standar bahasa yang akan didukung dari kontrol dropdown, lalu pilih OK atau Apply untuk menyimpan perubahan Anda.

CMake :

Visual Studio 2017 (15.7+) mendukung proyek CMake. CMake memungkinkan untuk mengaktifkan fitur C ++ modern dengan berbagai cara. Opsi paling dasar adalah mengaktifkan standar C ++ modern dengan menyetel properti target di CMakeLists.txt:

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

Dalam kasus perpustakaan antarmuka:

add_library (${PROJECT_NAME} INTERFACE)
target_compile_features (${PROJECT_NAME}
  INTERFACE
    # Enable C++17 standard compliance
    cxx_std_17
)
Zingam
sumber
Saya melakukan dropdown di VS2017 saya tetapi masih kompiler tetap menerapkan standar C ++ 98, apa-apaan ini
Travis Su
5

Jika membawa solusi Visual Studio 2015 yang ada ke dalam Visual Studio 2017 dan Anda ingin membangunnya dengan compiler asli c ++ 17, Anda harus menargetkan ulang solusi / proyek ke v141 terlebih dahulu, MAKA dropdown akan muncul seperti yang dijelaskan di atas (Properti Konfigurasi -> C / C ++ -> Bahasa -> Standar Bahasa)

WilliamClements
sumber
2

Visual studio 2019 versi:

Menu drop-down dipindahkan ke:

  • Klik kanan pada proyek (bukan solusi)
  • Properti (atau Alt + Enter)
  • Dari menu kiri pilih Properti Konfigurasi
  • Umum
  • Di tengah ada opsi yang disebut "C ++ Language Standard"
  • Di sebelahnya adalah menu drop down
  • Di sini Anda dapat memilih Default, ISO C ++ 14, 17 atau terbaru
sanitizedUser
sumber