Saya mencoba memperbarui kompiler C ++ saya ke C ++ 11. Saya telah mencari sedikit dan saya sampai pada kesimpulan bahwa saya harus menggunakan bendera -std=c++0x
atau -std=gnu++0x
, tetapi saya tidak tahu banyak hal tentang bendera. Ada yang bisa bantu saya? (Saya menggunakan Ubuntu 12.04.)
Berikut adalah kesalahan yang saya dapatkan dari kompiler ketika saya mencoba menggunakan pustaka yang termasuk dalam C ++ 11 (yaitu array):
#include <array>
#include <iostream>
int main()
{
std::array<int, 3> arr = {2, 3, 5};
...
}
File ini membutuhkan dukungan kompiler dan pustaka untuk standar ISO C ++ mendatang, C ++ 0x. Dukungan ini saat ini bersifat percobaan, dan harus diaktifkan dengan opsi -std = c ++ 0x atau -std = gnu ++ 0x.
-std=c++11
. Mungkin keduanya diizinkan.g++-4.6
secara default (yang hanya mendukung-std=c++0x
)g++
, misg++ -std=c++0x _filename_ && ./a.out
.Jawaban:
Flags (atau opsi-opsi kompiler) tidak lain adalah argumen-argumen command line biasa yang diteruskan ke compiler yang dapat dieksekusi.
Dengan asumsi Anda memanggil g ++ dari baris perintah (terminal):
$ g++ -std=c++11 your_file.cpp -o your_program
atau
$ g++ -std=c++0x your_file.cpp -o your_program
jika hal di atas tidak berhasil.
sumber
-Wall -g
setelahnyag++
-Werror
juga, tidak ada alasan untuk tidak memulai proyek.Anda dapat memeriksa
g++
dengan perintah Anda:ini akan memberi tahu Anda apa yang sedang dikompilasi.
Untuk beralih ke
g++
4.7 (dengan asumsi bahwa Anda telah menginstalnya di mesin Anda), jalankan:Kemudian pilih
2
sebagai pilihan (Mesin saya sudah menunjuk keg++
4.7, jadi *)Setelah Anda mengganti kompiler, sekali lagi jalankan
g++ --version
untuk memeriksa bahwa pergantian telah terjadi dengan benar.Sekarang kompilasi program Anda dengan
sumber
Ubuntu Anda pasti memiliki versi g ++ yang cukup baru. Bendera yang digunakan adalah
-std=c++0x
.sumber
I'm using Ubuntu 12.04.
dalam pertanyaan itu.Jika Anda ingin mempertahankan ekstensi kompiler GNU, gunakan -std = gnu ++ 0x daripada -std = c ++ 0x. Berikut kutipan dari halaman manual:
sumber
?:
operator biner ? Satu-satunya ekstensi lain yang muncul dalam pikiran, ekspresi struktur, digantikan oleh inisialisasi daftar C ++ 11. Bagaimanapun, kutipan ini terutama berkaitan dengan C, bukan C ++.Anda dapat merujuk ke tautan berikut yang fitur-fiturnya didukung dalam versi kompiler tertentu. Ini memiliki daftar lengkap fitur dukungan di kompiler. Tampak GCC mengikuti standar erat dan mengimplementasikan sebelum kompiler lain.
Mengenai pertanyaan Anda, Anda dapat mengkompilasi menggunakan
g++ -std=c++11
untuk C ++ 11g++ -std=c++14
untuk C ++ 14g++ -std=c++17
untuk C ++ 17g++ -std=c++2a
untuk C ++ 20, meskipun semua fitur C ++ 20 belum didukung lihat tautan ini untuk daftar dukungan fitur di GCC.Daftar ini berubah cukup cepat, perhatikan daftar tersebut, jika Anda menunggu fitur tertentu untuk didukung.
sumber