Подтвердить что ты не робот

С++ 11 в Windows

Мне интересно, насколько хорошо работает программное обеспечение на С++ 11 в Windows. Было бы очень удобно (и, возможно, наиболее естественно) использовать один из родных компиляторов для Windows - я думаю о Visual Studio 2012 Express или Visual Studio 2013 Express здесь. Все, что я мог найти на этот счет, - это

Есть ли у кого-нибудь опыт, насколько хорошо текущие версии Visual Studio могут обрабатывать С++ 11? Я действительно хочу начать использовать auto, lambdas, variadic templates, псевдонимы шаблонов, списки инициализаторов и ссылки rvalue (чтобы назвать только несколько) и все другие хорошие вещи прямо сейчас, но если Windows может быть проблемой, мне, возможно, придется использовать С++ 03 далее.

Другой возможностью является установка LLVM и Clang на Windows. Моя основная платформа - OSX, и в этой системе поддержка Clang для С++ 11 действительно хороша. Но я читал, что LLVM-версия стандартной библиотеки для С++ (libС++) плохо работает в Windows. Поэтому LLVM/clang не может быть вариантом.

Как вы оцениваете разработку С++ 11 в Windows?

Спасибо!

4b9b3361

Ответ 1

Я могу только дать вам свой опыт работы в качестве разработчика, поскольку я строил против ультрасовременного С++ в Windows, используя Visual С++, практически для всех, а также для установки нескольких других компиляторов и IDE (включая создание Clang на Windows для Visual Studio 2012, 2012 CTP и предварительный просмотр 2013 года). Ниже приведен мой опыт вплоть до настоящего времени (13 августа 2013 г.), и он основан на Обсуждение Herb Sutter и каждый день работает с компилятором.

Быстрый

Выполнить в противоположном направлении Visual Studio/VС++. Поддержка С++ 11 медленная, и в настоящее время они раздавлены с точки зрения возможностей компилятора по сравнению с Clang и GCC.

Настоящий

Visual С++ С++ 11 (и поддержка С++ 14) сейчас находится за гранью. Им не хватает мощных функций, которые делают метапрограммирование шаблонов в больших С++ (using выражениях в частности).

  • Использование не существует прямо сейчас. Я потратил часы и часы на перенос отличного кода С++ 11 с using на VС++, только чтобы он разбил его на определенные места, щелкнул или просто стал почти беспроблемным.

  • Поддержка Variadic в CTP была ужасно ужасной, и, хотя она улучшилась для версии Visual Studio 2013 Preview для компилятора, она все еще довольно плоха при сложных вариационных и шаблонных выражениях, которые подчиняются стандарту (и компилируются в GCC и Clang).

  • =delete и =default в значительной степени исчезли из VС++; в надежде на ближайшее будущее, может быть, это сработает (и оно должно прийти "скоро-иш", согласно дорожной карте) (мне пришлось реализовать конструкторы r-value явно для многих простых классов вплоть до 8-классного наследования иерархия один раз. Это была худшая пощечина, когда я наблюдал, как пользователи GCC и Clang бесплатно получают всю мою явную жесткую кодировку с помощью =default).

  • Как удержание (в основном из-за кода ОС Windows и некоторых бинарных компиляций), Empty-Base-Class-Optomizations в VС++ не работает. Не ожидайте, что ваши размеры иерархии классов или макет члена будут оптимизированы как минимум (наблюдайте за порядком в std::tuple при упаковке типов переменных).

Это касается всех разочарований, с которыми я столкнулся до сих пор. Они работоспособны - мне приходится работать с ними каждый день, но если вам нужна отличная поддержка на С++, вы должны перейти на GCC или Clang и каким-то образом заставить его работать на вашем компьютере.

Будущее

Если вы действительно хотите С++ 11, вам нужно подождать около года, и даже тогда выпуск VС++ в Visual Studio 2013 по-прежнему будет отсутствовать в нескольких функциях (и не ожидайте, что они также будут безболезненными). VС++ в 2013 году также будет по-прежнему критически отсутствовать std:: move и явная поддержка r-value во многих местах, что делает его болезненным, когда вы ожидаете, что работа будет работать.

Предостережение

Если вы не являетесь сильным пользователем Vim, у вас мало вариантов, когда речь заходит о IDE, с которыми вы можете работать (что хорошо работает с GDB/GCC или Clang).

  • QtCreator хорош, работает с MinGW и, как правило, достаточно полно, чтобы выполнить работу.
  • Можно использовать Sublime Text, но вам придется написать свою собственную систему зданий или делегировать ее чему-то еще.
  • Код:: Блокировка автозаполнения является неустойчивой и ведет себя странно, а сама среда IDE неудобно.
  • Предполагается, что Eclipse хорош, но мой опыт с ним неуклюжий и странный, с нечетными входными задержками во время (несмотря на 8,00 ГБ i7 машины Haswell с использованием SSD).
  • Visual Studio, как IDE, довольно прочная. Затем стек Visual Assist X сверху, и он хорошо работает для С++-кодирования. Это действительно единственная причина, по которой я продолжаю придерживаться этого, но я уже добился успеха в изучении Vim, поэтому я могу в основном вырезать Visual Studio вообще, когда придет время.

О библиотеках

Поддержка библиотеки в VС++ довольно полна (поскольку их сломанный компилятор позволяет им быть полным). Он имеет регулярное выражение, в то время как в большинстве других библиотек отсутствует несуществующая или сломанная поддержка регулярных выражений. Но это не означает, что библиотека VС++ отлично сочетается с некоторыми функциями С++ 11, в которых говорится, что она делает (изображение melak47).

И наконец

Если вы хотите, чтобы код, который, как вы знаете, будет работать в Windows, 100%, на всю оставшуюся вечность, вы, вероятно, захотите запрограммировать на VС++. Другое "преимущество" заключается в том, что код, который вы пишете в VС++, является наименьшим подмножеством С++/С++ 11, с которым вы можете писать, поэтому в конце он должен собираться повсюду. Разумеется, это противоречит самой идее использования красивого С++ 11 и наслаждается им, поэтому... умрите (я) разумно.

Ответ 2

Поддержка VC С++ 11 далека от завершения, но она включает в себя самые важные пользовательские функции.

И вот другая вещь. По моему опыту, хорошо установить MinGW или Clang в Windows, но у вас будут некоторые неудобства, потому что вряд ли кто-то предварительно компилирует двоичные файлы для этих компиляторов для Windows (тогда как многие люди прекомпилируют двоичные файлы для Visual Studio).

Кроме того, насколько я знаю, нет сред для Windows, которые удаленно продвинуты как Visual Studio для таких вещей, как графическая отладка, intellisense и тому подобное. Когда я пробовал Code:: Blocks, он просто не работал, реалистично.

Ответ 3

Вы можете увидеть здесь для всестороннего сравнения поддержки компилятора для языковых возможностей С++ 11. Вот какая-то информация о дорожной карте VS С++ 11/14.

MSVC отстает от других основных компиляторов С++, но по-прежнему получает поддержку многих из наиболее важных функций.

  • Авто, lambdas и ссылки rvalue доступны из VS10. В IIRC есть оговорка с ссылками rvalue, что компилятор не создает конструкцию перемещения и перемещает операторы присваивания.

  • вариации шаблонов и списки инициализаторов доступны в предварительном просмотре VS2013, включая поддержку библиотеки.

  • сглаживание типа (т.е. typedefs с ключевым словом using) ожидается в RTM RT RT.


Если вам не нужно взаимодействовать с двоичными файлами, создаваемыми VS, тогда установка другого компилятора, такого как GCC, работоспособна. Я понимаю, что Clang также может работать в среде mingw с libstdС++, а не с libС++.

Ответ 4

http://nuwen.net/mingw.html

Нювенский дистрибутив УДИВИТЕЛЬНО! Это MinGW, но он выходит намного быстрее, чем MinGW, когда выходят новые выпуски GCC. Он также поставляется со всеми сборками и другими полезными библиотеками, уже скомпилированными. Это все, что я использую в Windows больше.

Ответ 5

Мы используем С++ 11 уже несколько месяцев в производственном программном обеспечении через windows и linux в некоторых продуктах here.com без каких-либо проблем. Мы используем auto, lambdas, диапазон для... Использование Visual studio 2012 и gcc 4.7.

Ответ 6

Я использовал VS2012 и использовал возможности С++ 11, где это возможно. В реализациях есть некоторые ошибки, и я нашел полезным использовать другой компилятор, когда я получаю ошибки из Visual Studio для сравнения.

Ответ 7

Clang и GCC возглавляют работу с поддержкой С++ 11, и, похоже, это гонка шеи и шеи с точки зрения поддержки С++ 11 между ними. MSVC печально задыхается, пытаясь не отставать и отставать. Nuwen MingGW-дистрибутив, как отмечает Джейк, отлично работает и, похоже, хорошо работает с Eclipse (выпуском Kepler), и я не испытывал слишком много боли, используя его вместе с Netbeans 7.4. В настоящее время дистрибутив Nuwen находится на версии 11.2 на момент написания статьи и, как вы можете видеть на веб-сайте Stephan, теперь является x64-родным, с GCC 4.8.1 и Boost 1.54.0, а режим GCC по умолчанию также установлен на С++ 11.

Я, конечно, начинаю использовать Eclipse Kepler и Nuwen MinGW в предпочтении MSVC 2012 все больше и больше, но я в значительной степени программист на С++, который все еще чувствует себя мокрым и, возможно, не попал в более неясные проблемы, которого С++ - их хлеб и масло, могут знать о.