Как включить компиляцию C ++ 17 в Visual Studio?

121

Я хочу использовать возможности C ++ 17.

Как переключить компиляцию с C ++ 14 на C ++ 17 в Microsoft Visual Studio?

Или это недоступно в релизных версиях VS?

Tudvari
источник
4
Какие особенности C ++ 17? Какая версия Visual Studio? Если вы спрашиваете о C ++ 17, почему вы пометили свой вопрос c++11и c++14?
ildjarn
6
C ++ 17 не был доступен, и я подумал, что те, кто интересуется конкретными версиями C ++, лучше знают, как его переключить. Например, я хочу, чтобы std :: vector.emplace_back () возвращал ссылку на вновь созданный элемент. Я знаю эту строку +1, и я получил эту ссылку, но я все равно хотел бы знать ответ на свой вопрос. Сообщество VS 2015 (14.0.25431.01 Обновление 3)
Тудвари
Вам, вероятно, следует проверить здесь: blogs.msdn.microsoft.com/visualstudio
Mikel F
3
Вы не можете включить определенные языковые диалекты в VS, вы получаете то, что они реализовали. Если вы используете VS21015, вам может очень повезти с функциями стандартной библиотеки, включенными в C ++ 17, но не с языковыми функциями.
Praetorian
1
@preat MSVC 2017 имеет «последний» параметр, но он еще не выпущен.
Якк - Адам Неврамонт

Ответы:

163

Теперь есть раскрывающийся список (по крайней мере, с 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 ++ latest. Стандарт C ++ 20 ожидается в следующем году. Я отредактировал комментарий в своем ответе.
Johan Lundberg
31

MSBuild (проект / решение Visual Studio * .vcproj / *. Sln ) :

Добавьте к дополнительным параметрам в настройках проекта: /std:c++latestдля включения последних функций - в настоящее время C ++ 17 с VS2017, VS2015 Update 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. Выберите Свойства конфигурации, C / C ++, Язык.
  3. В C ++ Language Standard выберите поддерживаемый языковой стандарт в раскрывающемся списке, затем нажмите OK или Применить, чтобы сохранить изменения.

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
)
Zingam
источник
Я выполнил раскрывающийся список в моем VS2017, но компилятор продолжает применять стандарт C ++ 98, какого черта
Трэвис Су
10

Visual Studio 2015 с обновлением 3 не поддерживает функцию C ++ 17, которую вы ищете ( emplace_back()возвращает ссылку).

Поддержка функций C ++ 11/14/17 (современный C ++)

Возможности C ++ 11/14/17 в VS 2015 RTM

STL VS 2015 Update 2 на данный момент является C ++ 17.

Visual Studio 2015 с обновлением 3

Исправления STL в VS 2015 с обновлением 3

Реми Лебо
источник
5

Если вы переносите существующее решение Visual Studio 2015 в Visual Studio 2017 и хотите создать его с помощью собственного компилятора c ++ 17, вы должны сначала перенастроить решение / проекты на версию 141, ТОГДА появится раскрывающийся список, как описано выше (Свойства конфигурации -> C / C ++ -> Язык -> Стандарт языка)

WilliamClements
источник
2

Версия Visual Studio 2019:

Выпадающее меню было перемещено в:

  • Щелкните правой кнопкой мыши проект (не решение)
  • Свойства (или Alt + Enter)
  • В меню слева выберите Свойства конфигурации.
  • Общее
  • Посередине есть опция под названием «Стандарт языка C ++».
  • Рядом с ним выпадающее меню
  • Здесь вы можете выбрать Default, ISO C ++ 14, 17 или последнюю версию.
sanitizedUser
источник