Bisakah saya menggunakan C ++ 11 dengan Xcode?

86

Saya sedang mempertimbangkan penggunaan beberapa fitur C ++ 11 (seperti automisalnya) di beberapa proyek lintas platform (Windows + Mac). Di Windows, Visual Studio mendukung bagian dari standar C ++ 11 yang akan datang yang memungkinkan saya untuk menyederhanakan bagian dari basis kode sehingga secara alami saya akan tertarik untuk mulai menggunakan fitur ini.

Namun sejauh yang saya ketahui, versi XCode saat ini (3.2.4 + GCC 4.2) sama sekali tidak mendukung fitur C ++ 11. Dapatkah saya meningkatkan versi GCC atau versi CLang? Atau haruskah saya menggigit lidah dan menunggu Apple mengemas versi baru suatu saat nanti?

villintehaspam.dll
sumber
Lihatlah jawabannya di sana - sini .
F'x
Untuk hasil yang lebih positif, lihat: stackoverflow.com/questions/837992/update-gcc-on-osx
David Rodríguez - dribeas
Mengenai Clang: Saya yakin itu mencapai dukungan C ++ 03 yang wajar baru-baru ini, tetapi C ++ 0x masih merupakan tujuan yang jauh. Misalnya, dukungan template variadic sedang dalam proses dan referensi pemindahan semantik / rvalue belum diimplementasikan.
Matthieu M.
Template variadic bekerja dengan baik untuk saya dengan dentang.
Alexandre Hamez

Jawaban:

76

Xcode 4.2 akhirnya menambahkan dukungan untuk C ++ 0X:

  1. Di layar setelan build proyek, aktifkan opsi "Semua".

  2. Di bagian "Build Options", setel compiler ke "Apple LLVM compiler 3.0".

  3. Gulir ke bawah ke bagian "Apple LLVM Compiler 3.0 - Language" dan setel "C ++ Language Dialect" ke "C ++ 0X" dan "C ++ Standard Library" ke "libc ++".

Std :: move (), move constructor dan referensi R-Value diketahui berfungsi seperti yang diharapkan, dan saya menguji pada std :: thread dan std :: atomic.

RichardLiu
sumber
2
@ RichardLiu, bagaimana dengan GNU++0Xopsi untuk C++ Language Dialectdan libstdc++opsi untuk C++ Standard Library? Kapan mereka akan digunakan?
Timah
Saya telah melihat-lihat /Developer/About\ Xcode.pdfdan ya, dikatakan bahwa C ++ 11 didukung, tetapi ketika saya menggunakannya -std=gnu++0xakan keluar cc1plus: error: unrecognized command line option "-std=0x++"! Haruskah saya gunakan clang++sebagai gantinya?
errordeveloper
@errordeveloper, sejauh ini saya hanya berhasil mengkompilasi C ++ 11 DALAM IDE Xcode. Saya tidak tahu cara mengaktifkan C ++ 11 di baris perintah atau makefile. Maaf.
RichardLiu
1
@RichardLiu: XCode biasanya digunakan clang++saat mengompilasi, bukan g++, itulah sebabnya dukungan C ++ 11 gagal saat mencoba menggunakan g++dari baris perintah (karena g++Xcode kuno memberi Anda tidak mendukungnya). FYI saja.
Cornstalks
9

======= Pembaruan 2012: =======

Mulailah dengan Clang - Banyak fitur C ++ 11 sekarang tersedia di Clang. Ini disertakan dengan Xcode.

======= Jawaban asli dari Jan 2011: =======

kompiler intel mungkin cara terbersih untuk pergi saat ini. http://software.intel.com/en-us/articles/intel-composer-xe/

clang menjanjikan, tetapi tidak terlalu stabil atau menampilkan fitur wrt c ++ 0x. c ++ masih sangat baru untuk clang.

gcc: relatif matang, tetapi Anda harus menulis dan memelihara plugin kompiler Anda untuk xcode.

Anda juga dapat menentukan skrip khusus, tetapi itu sulit untuk dipelihara ... kecuali Anda keluar semua dan membuat alat adaptor.

justin
sumber
1

Xcode menggunakan kompiler GCC atau Clang C ++. Semua fitur yang didukung oleh penyusun tersebut adalah permainan yang adil. Halaman kompatibilitas GCC C ++ ada di sini dan halaman kompatibilitas Clang C ++ ada di sini .

Barry Wark
sumber
2
Benar, tetapi dukungan GCC berhenti di 4.2 yang mulai sedikit lama
Mattia
0

Saya telah menemukan auto, dectype (), range based "for (:)" bekerja dalam proyek lintas platform (LLVM untuk MacOSX, iOS, gcc / linux, MSVC 10 / windows).

lambdas & makro variadic tampaknya tidak berfungsi di bawah LLVM namun sayangnya.

centaurian_slug
sumber
1
MSVC 10 dan 11 tidak mendukung berbasis jangkauan untuk. Dentang, di sisi lain, tidak mendukung template variadic baik-baik saja.
Alex B