Як увімкнути компіляцію 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 оновлення 3)
Тудварі

Ви, ймовірно, повинні перевірити тут: blogs.msdn.microsoft.com/visualstudio
Mikel F

3
Ви не можете ввімкнути конкретні мовні діалекти в VS, ви отримаєте все, що вони реалізували. Ви можете мати велику удачу зі стандартними функціями бібліотеки, проголосованими за C ++ 17, якщо ви використовуєте VS21015, але не так багато з мовними функціями.
Преторіан

1
@preat MSVC 2017 має "останню" настройку, але вона ще не випущена.
Якк - Адам Невраумон

Відповіді:


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:перемикачів, які я перераховую?
Йохан Лундберг

3
Я бачу вигоду, коли приходить від gccабо clang. Тоді -менш нав'язливий (однак синтаксис все ще незначно відрізняється ( :замість =)).
Рой Дантон

У VS 2019, щоб перейти до властивостей проекту, перейдіть до «Провідника рішень», клацнувши правою кнопкою миші на назві проекту та виберіть Властивості. Потім дотримуйтесь вказівок цієї публікації.
BabarBaig

1
@AndreiKrasutski. Ще немає ISO C ++ 20, але деяка підтримка в / std: c ++ найновіша. Стандарт C ++ 20 очікується наступного року. Я відредагував у коментарі свою відповідь.
Йохан Лундберг

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/

EDIT (жовтень 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. Виберіть Властивості конфігурації, C / C ++, Мова.
  3. У стандарті мови ++ C ++ виберіть стандарт меню, який слід підтримувати у спадному контролі, а потім виберіть ОК або Застосувати, щоб зберегти зміни.

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 або найновіший
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.