Могу ли я использовать C ++ 11 с Xcode?


86

Я рассматриваю возможность использования некоторых функций C ++ 11 ( autoнапример, таких) в некоторых кроссплатформенных проектах (Windows + Mac). В Windows Visual Studio поддерживает части будущего стандарта C ++ 11, который позволит мне упростить части базы кода, поэтому, естественно, мне было бы интересно начать использовать эти функции.

Но насколько мне известно, текущая версия XCode (3.2.4 + GCC 4.2) вообще не поддерживает никаких функций C ++ 11. Могу ли я как-то обновить версию GCC или версию CLang? Или мне просто прикусить язык и подождать, пока Apple выпустит новую версию когда-нибудь в будущем?


Посмотрите ответы здесь и там .
F'x 01

Для более положительного результата посмотрите: stackoverflow.com/questions/837992/update-gcc-on-osx
Дэвид Родригес - dribeas 01

Что касается Clang: я считаю, что недавно он достиг разумной поддержки C ++ 03, но C ++ 0x все еще далека. Например, поддержка вариативного шаблона находится в стадии разработки, а ссылки на семантику перемещения / rvalue еще не реализованы.
Matthieu M.

У меня шаблоны с переменными параметрами работают с clang.
Александр Хамес

Ответы:


76

Xcode 4.2 наконец-то добавил поддержку C ++ 0X:

  1. На экране настроек сборки проекта включите опцию «Все».

  2. В разделе «Параметры сборки» установите для компилятора значение «Компилятор Apple LLVM 3.0».

  3. Прокрутите вниз до раздела «Apple LLVM Compiler 3.0 - Язык» и установите «Диалект языка C ++» на «C ++ 0X» и «Стандартная библиотека C ++» на «libc ++».

Известно, что std :: move (), конструктор перемещения и ссылка R-Value работают должным образом, и я тестирую std :: thread и std :: atomic.


2
@ RichardLiu, а как насчет GNU++0Xварианта C++ Language Dialectи libstdc++варианта C++ Standard Library? Когда их использовать?
Tin

Я заглянул, /Developer/About\ Xcode.pdfи да, там написано, что C ++ 11 поддерживается, но когда я использую, -std=gnu++0xон выплевывает cc1plus: error: unrecognized command line option "-std=0x++"! Должен ли я использовать clang++вместо этого?
errordeveloper 04

@errordeveloper, до сих пор я только успешно скомпилировал C ++ 11 В Xcode IDE. Я не знаю, как включить C ++ 11 в командной строке или в make-файле. Сожалею.
RichardLiu

1
@RichardLiu: XCode обычно используется clang++при компиляции, а не g++поэтому поддержка C ++ 11 не работает при попытке использования g++из командной строки (потому что древний g++XCode не поддерживает его). Просто к вашему сведению.
Cornstalks

9

======= Обновление 2012: =======

Начните с Clang. Многие функции C ++ 11 теперь доступны в Clang. Он включен в Xcode.

======= Исходный ответ от января 2011 г .: =======

Компилятор Intel может быть самым чистым решением в настоящее время. http://software.intel.com/en-us/articles/intel-composer-xe/

clang многообещающий, но не особо стабильный и не имеющий особенностей по сравнению с функциями C ++ 0x. c ++ все еще очень нов для clang.

gcc: относительно зрелый, но вам придется писать и поддерживать плагины компилятора для xcode.

вы также можете указать пользовательские сценарии, но поддерживать это сложно ... если вы не сделаете все возможное и не создадите инструмент адаптера.


1

Xcode использует компиляторы GCC или Clang C ++. Любые функции, поддерживаемые этими компиляторами, являются честной игрой. Страница совместимости GCC с C ++ находится здесь, а страница совместимости с Clang C ++ здесь .


2
Верно, но поддержка GCC останавливается на отметке 4,2, которая начинает давить на зуб
Маттиа

0

Я обнаружил, что auto, decltype (), range based "for (:)" работают в кроссплатформенном проекте (LLVM для MacOSX, iOS, gcc / linux, MSVC 10 / windows).

К сожалению, лямбды и макросы с переменным числом аргументов не работают в LLVM.


1
MSVC 10 и 11 не поддерживают для. Clang, с другой стороны, это поддерживает VARIADIC шаблоны просто отлично.
Alex B
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.