วิธีเปิดใช้งานการคอมไพล์ C ++ 17 ใน Visual Studio


120

ฉันต้องการใช้คุณสมบัติ C ++ 17

ฉันจะเปลี่ยนการคอมไพล์จาก C ++ 14 เป็น C ++ 17 ใน Microsoft Visual Studio ได้อย่างไร

หรือไม่สามารถใช้งานได้ใน VS เวอร์ชันที่วางจำหน่าย?


4
C ++ 17 มีคุณสมบัติใดบ้าง Visual Studio เวอร์ชันใด หากคุณถามเกี่ยวกับ C ++ 17 ทำไมคุณถึงแท็กคำถามของคุณc++11และc++14?
ildjarn

6
c ++ 17 ไม่พร้อมใช้งานและฉันคิดว่าผู้ที่สนใจ C ++ เวอร์ชันเฉพาะจะรู้วิธีเปลี่ยนได้ดีกว่า ตัวอย่างเช่นฉันต้องการให้ std :: vector.emplace_back () คืนการอ้างอิงถึงองค์ประกอบที่สร้างขึ้นใหม่ ฉันรู้ว่า +1 บรรทัดนั้นและฉันได้รับข้อมูลอ้างอิงนั้น แต่ฉันก็อยากรู้คำตอบสำหรับคำถามของฉันอยู่ดี VS Community 2015 (14.0.25431.01 Update 3)
Tudvari

คุณควรตรวจสอบที่นี่: blogs.msdn.microsoft.com/visualstudio
Mikel F

3
คุณไม่สามารถเปิดใช้ภาษาถิ่นเฉพาะใน VS คุณจะได้รับสิ่งที่พวกเขานำมาใช้ คุณอาจโชคดีมากที่มีฟีเจอร์ไลบรารีมาตรฐานที่โหวตให้เป็น C ++ 17 หากคุณใช้ VS21015 แต่มีฟีเจอร์ภาษาไม่มากนัก
Praetorian

1
@preat MSVC 2017 มีการตั้งค่า "ล่าสุด" แต่ยังไม่เปิดตัว
Yakk - Adam Nevraumont

คำตอบ:


162

ตอนนี้มีเมนูแบบเลื่อนลง (อย่างน้อยตั้งแต่ VS 2017.3.5) ซึ่งคุณสามารถเลือก C ++ 17 โดยเฉพาะได้ ตัวเลือกที่ใช้ได้คือ (ภายใต้โปรเจ็กต์> คุณสมบัติ> C / C ++> ภาษา> มาตรฐานภาษา C ++)

  • มาตรฐาน ISO C ++ 14 ตัวเลือกบรรทัดคำสั่ง msvc:/std:c++14
  • มาตรฐาน ISO C ++ 17 ตัวเลือกบรรทัดคำสั่ง msvc:/std:c++17
  • ร่างมาตรฐานล่าสุด ตัวเลือกบรรทัดคำสั่ง msvc:/std:c++latest

(ฉันเดิมพันเมื่อ C ++ 20 หมดและ Visual Studio จะได้รับการสนับสนุนอย่างเต็มที่/std:c++20)


3
ไวยากรณ์-std:c++14, -std:c++17และ-std:c++latestยังใช้งานได้เช่นเมื่อคุณต้องการที่จะเข้าสู่ตัวเลือกคอมไพเลอร์ด้วยตนเอง (ทดสอบกับ VS2017)
ร้อยทั้งร้อย

คำตอบนั้นยังไม่ชัดเจนหรือคุณหมายถึงเฉพาะ-แทน/std:สวิตช์ที่ฉันแสดงรายการ?
Johan Lundberg

3
ผมเห็นประโยชน์เมื่อมาจากหรือgcc clangจากนั้นจึง-มีการล่วงล้ำน้อยกว่า (อย่างไรก็ตามไวยากรณ์ยังคงแตกต่างกันเล็กน้อย ( :แทนที่จะเป็น=))
ร้อยทั้งร้อย

ใน VS 2019 ไปที่ Project Properties ไปที่ "Solution Explorer" คลิกขวาที่ชื่อโปรเจ็กต์แล้วเลือก Properties จากนั้นทำตามคำแนะนำของโพสต์นี้
BabarBaig

1
@AndreiKrasutski ยังไม่มี ISO C ++ 20 แต่บางส่วนรองรับ / std: c ++ ล่าสุด คาดว่าจะมีมาตรฐาน C ++ 20 ในปีหน้า ฉันแก้ไขในความคิดเห็นในคำตอบของฉัน
Johan Lundberg

31

MSBuild (โครงการ Visual Studio / โซลูชัน* .vcproj / *. sln ) :

เพิ่มในตัวเลือกเพิ่มเติมในการตั้งค่าโครงการ: /std:c++latestเพื่อเปิดใช้งานคุณสมบัติล่าสุด - ปัจจุบัน C ++ 17 ณ VS2017, VS2015 อัปเดต 3

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

/permissive- จะปิดใช้งานส่วนขยาย C ++ ที่ไม่ได้มาตรฐานและจะเปิดใช้งานการปฏิบัติตามมาตรฐานใน VS2017

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

แก้ไข (ต.ค. 2018):คุณสมบัติล่าสุดของ VS2017 มีการบันทึกไว้ที่นี่:

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

VS2017 รองรับ: /std:[c++14|c++17|c++latest]ตอนนี้ แฟล็กเหล่านี้สามารถตั้งค่าผ่านเพจคุณสมบัติของโปรเจ็กต์:

เมื่อต้องการตั้งค่าตัวเลือกคอมไพเลอร์นี้ในสภาพแวดล้อมการพัฒนา Visual Studio

  1. เปิดกล่องโต้ตอบหน้าคุณสมบัติของโครงการ สำหรับรายละเอียดโปรดดูการทำงานกับคุณสมบัติโครงการ
  2. เลือก Configuration Properties, C / C ++, Language
  3. ในภาษา C ++ Standard เลือกมาตรฐานภาษาที่จะรองรับจากตัวควบคุมแบบเลื่อนลงจากนั้นเลือกตกลงหรือใช้เพื่อบันทึกการเปลี่ยนแปลงของคุณ

CMake :

Visual Studio 2017 (15.7+) รองรับโครงการ CMake CMake ทำให้สามารถเปิดใช้งานคุณสมบัติ C ++ ที่ทันสมัยได้หลายวิธี ตัวเลือกพื้นฐานที่สุดคือการเปิดใช้งานมาตรฐาน C ++ ที่ทันสมัยโดยการตั้งค่าคุณสมบัติของเป้าหมายใน CMakeLists.txt:

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

ในกรณีของไลบรารีอินเทอร์เฟซ:

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

ฉันทำดรอปดาวน์ใน VS2017 ของฉัน แต่คอมไพเลอร์ยังคงใช้มาตรฐาน C ++ 98 ต่อไปสิ่งที่ห่า
Travis Su

10

5

หากนำโซลูชัน Visual Studio 2015 ที่มีอยู่มาใช้ใน Visual Studio 2017 และคุณต้องการสร้างด้วย c ++ 17 เนทีฟคอมไพเลอร์ก่อนอื่นคุณควรกำหนดเป้าหมายโซลูชัน / โปรเจ็กต์ใหม่เป็น v141 จากนั้นดรอปดาวน์จะปรากฏขึ้นตามที่อธิบายไว้ข้างต้น (คุณสมบัติการกำหนดค่า -> C / C ++ -> ภาษา -> มาตรฐานภาษา)


2

Visual Studio 2019 เวอร์ชัน:

เมนูแบบเลื่อนลงถูกย้ายไปที่:

  • คลิกขวาที่โครงการ(ไม่ใช่วิธีแก้ปัญหา)
  • คุณสมบัติ(หรือ Alt + Enter)
  • จากเมนูด้านซ้ายเลือกคุณสมบัติการกำหนดค่า
  • ทั่วไป
  • ตรงกลางมีตัวเลือกที่เรียกว่า "มาตรฐานภาษา C ++"
  • ถัดจากนั้นคือเมนูแบบเลื่อนลง
  • คุณสามารถเลือกค่าเริ่มต้น ISO C ++ 14, 17 หรือล่าสุดได้ที่นี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.