Чи можу я використовувати 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

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

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

Варіадичні шаблони для мене чудово працюють із дзвінкою.
Александр Хамез,

Відповіді:


76

Xcode 4.2 нарешті додав підтримку C ++ 0X:

  1. На екрані налаштувань збірки проектів увімкніть параметри «Всі».

  2. У розділі "Параметри побудови" встановіть для компілятора значення "Apple LLVM compiler 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? Коли їх використовувати?
Олово

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

@errordeveloper, дотепер я успішно скомпілював C ++ 11 ВІД XDE IDE. Я не знаю, як увімкнути C ++ 11 у командному рядку або makefile. Вибачте.
RichardLiu

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

9

======= Оновлення 2012: =======

Почніть з Clang - Багато функцій C ++ 11 тепер доступні в Clang. Він входить до складу Xcode.

======= Оригінальна відповідь від січня 2011 року: =======

На даний момент компілятор Intel може бути найчистішим способом. http://software.intel.com/en-us/articles/intel-composer-xe/

перспективні, але не особливо стабільні або представлені функції wrt c ++ 0x clang. c ++ все ще дуже новий для clang.

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

Ви також можете вказати власні сценарії, але це важко дотримуватися ... якщо ви не вийдете з усього і не створите адаптер.


1

Xcode використовує компілятори GCC або Clang C ++. Будь-які функції, що підтримуються цими компіляторами, є чесною грою. Сторінка сумісності C ++ GCC тут, а сторінка сумісності Clang C ++ тут .


2
Правда, але підтримка GCC зупиняється на 4.2, який починає трохи затягуватися в зубі
Mattia

0

Я знайшов роботу авто, decltype (), діапазону "для (:)" у крос-платформному проекті (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.