Làm cách nào để kích hoạt biên dịch C ++ 17 trong Visual Studio?


120

Tôi muốn sử dụng C ++ 17 tính năng.

Làm cách nào để chuyển biên dịch từ C ++ 14 sang C ++ 17 trong Microsoft Visual Studio?

Hoặc nó không có sẵn trong các phiên bản phát hành của VS?


4
C ++ 17 có những tính năng nào? Phiên bản Visual Studio nào? Nếu bạn đang hỏi về C ++ 17 tại sao bạn lại gắn thẻ câu hỏi của mình c++11c++14?
ildjarn

6
c ++ 17 không có sẵn và tôi nghĩ rằng những người quan tâm đến các phiên bản cụ thể của C ++ biết cách chuyển đổi nó tốt hơn. Ví dụ: tôi muốn std :: vector.emplace_back () trả lại một tham chiếu đến phần tử mới được tạo. Tôi biết dòng +1 đó và tôi nhận được tham chiếu đó, Nhưng dù sao thì tôi cũng muốn biết câu trả lời cho câu hỏi của mình. VS Community 2015 (14.0.25431.01 Cập nhật 3)
Tudvari

Bạn có thể nên kiểm tra ở đây: blogs.msdn.microsoft.com/visualstudio
Mikel F

3
Bạn không thể bật các phương ngữ ngôn ngữ cụ thể trong VS, bạn sẽ có được bất kỳ thứ gì họ đã triển khai. Bạn có thể gặp may mắn với các tính năng thư viện tiêu chuẩn được bình chọn thành C ++ 17 nếu bạn đang sử dụng VS21015, nhưng với các tính năng ngôn ngữ thì không nhiều.
Praetorian

1
@preat MSVC 2017 có cài đặt "mới nhất", nhưng cài đặt đó chưa được phát hành.
Yakk - Adam Nevraumont

Câu trả lời:


162

Bây giờ có một menu thả xuống (ít nhất là kể từ VS 2017.3.5), nơi bạn có thể chọn C ++ 17 một cách cụ thể. Các tùy chọn có sẵn là (trong dự án> Thuộc tính> C / C ++> Ngôn ngữ> Tiêu chuẩn ngôn ngữ C ++)

  • Tiêu chuẩn ISO C ++ 14. Tùy chọn dòng lệnh msvc:/std:c++14
  • Tiêu chuẩn ISO C ++ 17. Tùy chọn dòng lệnh msvc:/std:c++17
  • Tiêu chuẩn dự thảo mới nhất. Tùy chọn dòng lệnh msvc:/std:c++latest

(Tôi cá rằng, khi C ++ 20 ra mắt và được hỗ trợ đầy đủ hơn bởi Visual Studio thì nó sẽ được hỗ trợ /std:c++20)


3
Cú pháp -std:c++14, -std:c++17-std:c++latestcũng làm việc, ví dụ như khi bạn muốn tự nhập tùy chọn trình biên dịch (thử nghiệm với VS2017).
Roi Danton,

Câu trả lời vẫn chưa rõ ràng, hay ý bạn là -thay vì các /std:công tắc tôi liệt kê?
Johan Lundberg

3
Tôi thấy lợi ích khi đến từ gcchoặc clang. Sau đó, -ít xâm nhập hơn (tuy nhiên cú pháp vẫn khác một chút ( :thay vì =)).
Roi Danton,

Trong VS 2019, để truy cập Thuộc tính dự án, hãy chuyển đến "Giải pháp Explorer", nhấp chuột phải vào tiêu đề dự án và chọn Thuộc tính. Sau đó làm theo hướng dẫn của bài viết này.
BabarBaig

1
@AndreiKrasutski. Chưa có ISO C ++ 20 nhưng một số hỗ trợ trong / std: c ++ mới nhất. Tiêu chuẩn C ++ 20 được mong đợi vào năm tới. Tôi đã chỉnh sửa trong một bình luận trong câu trả lời của tôi.
Johan Lundberg

31

MSBuild (Dự án / giải pháp Visual Studio * .vcproj / *. Sln ) :

Thêm vào Tùy chọn bổ sung trong Cài đặt dự án: /std:c++latestđể bật các tính năng mới nhất - hiện tại là C ++ 17 kể từ VS2017, VS2015 Cập nhật 3.

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

/permissive- sẽ tắt các tiện ích mở rộng C ++ không chuẩn và sẽ kích hoạt tính năng tuân thủ tiêu chuẩn trong VS2017.

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

CHỈNH SỬA (tháng 10 năm 2018): Các tính năng mới nhất của VS2017 được ghi lại ở đây:

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

VS2017 hỗ trợ: /std:[c++14|c++17|c++latest]ngay bây giờ. Các cờ này có thể được đặt thông qua các trang thuộc tính của dự án:

Để đặt tùy chọn trình biên dịch này trong môi trường phát triển Visual Studio

  1. Mở hộp thoại Trang thuộc tính của dự án. Để biết chi tiết, hãy xem Làm việc với Thuộc tính Dự án.
  2. Chọn Thuộc tính cấu hình, C / C ++, Ngôn ngữ.
  3. Trong Tiêu chuẩn ngôn ngữ C ++, chọn tiêu chuẩn ngôn ngữ để hỗ trợ từ điều khiển thả xuống, sau đó chọn OK hoặc Áp dụng để lưu các thay đổi của bạn.

CMake :

Visual Studio 2017 (15.7+) hỗ trợ các dự án CMake. CMake làm cho nó có thể kích hoạt các tính năng C ++ hiện đại theo nhiều cách khác nhau. Tùy chọn cơ bản nhất là kích hoạt tiêu chuẩn C ++ hiện đại bằng cách đặt thuộc tính của mục tiêu trong CMakeLists.txt:

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

Trong trường hợp của một thư viện giao diện:

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

Tôi đã thực hiện trình đơn thả xuống trong VS2017 của mình nhưng trình biên dịch vẫn tiếp tục áp dụng tiêu chuẩn C ++ 98, cái quái gì vậy
Travis Su


5

Nếu đưa giải pháp Visual Studio 2015 hiện có vào Visual Studio 2017 và bạn muốn xây dựng nó bằng trình biên dịch gốc c ++ 17, trước tiên bạn nên nhắm mục tiêu lại giải pháp / dự án thành v141, SAU ĐÓ trình đơn thả xuống sẽ xuất hiện như mô tả ở trên (Thuộc tính cấu hình -> C / C ++ -> Ngôn ngữ -> Tiêu chuẩn ngôn ngữ)


2

Phiên bản Visual Studio 2019:

Menu thả xuống đã được chuyển đến:

  • Nhấp chuột phải vào dự án (không phải giải pháp)
  • Thuộc tính (hoặc Alt + Enter)
  • Từ menu bên trái, chọn Thuộc tính cấu hình
  • Chung
  • Ở giữa có một tùy chọn được gọi là "Tiêu chuẩn ngôn ngữ C ++"
  • Bên cạnh đó là menu thả xuống
  • Tại đây bạn có thể chọn Mặc định, ISO C ++ 14, 17 hoặc mới nhất
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.