J'essaie de mettre à jour mon compilateur C ++ vers C ++ 11. J'ai cherché un peu et je suis arrivé à la conclusion que je dois utiliser le drapeau -std=c++0x
ou -std=gnu++0x
, mais je ne sais pas beaucoup de choses sur les drapeaux. Quelqu'un peut-il m'aider? (J'utilise Ubuntu 12.04.)
Voici l'erreur que j'obtiens du compilateur lorsque j'essaie d'utiliser une bibliothèque incluse dans C ++ 11 (c'est-à-dire un tableau):
#include <array>
#include <iostream>
int main()
{
std::array<int, 3> arr = {2, 3, 5};
...
}
Ce fichier nécessite le support du compilateur et de la bibliothèque pour la prochaine norme ISO C ++, C ++ 0x. Cette prise en charge est actuellement expérimentale et doit être activée avec les options du compilateur -std = c ++ 0x ou -std = gnu ++ 0x.
-std=c++11
place. Peut-être que les deux sont autorisés, cependant.g++-4.6
par défaut (qui ne prend en charge que-std=c++0x
)g++
, par exempleg++ -std=c++0x _filename_ && ./a.out
.Réponses:
Les indicateurs (ou options du compilateur) ne sont que des arguments de ligne de commande ordinaires passés à l'exécutable du compilateur.
En supposant que vous appelez g ++ à partir de la ligne de commande (terminal):
$ g++ -std=c++11 your_file.cpp -o your_program
ou
$ g++ -std=c++0x your_file.cpp -o your_program
si ce qui précède ne fonctionne pas.
la source
-Wall -g
juste aprèsg++
-Werror
aussi, aucune raison de ne pas le faire lors du démarrage d'un projet.Vous pouvez vérifier votre
g++
commande par:cela vous dira quel complice il pointe actuellement.
Pour passer à
g++
4.7 (en supposant que vous l'avez installé sur votre machine), exécutez:Sélectionnez ensuite
2
comme sélection (Ma machine pointe déjà surg++
4.7, donc le *)Une fois que vous changez de complicateur, puis lancez
g++ --version
à pour vérifier que la commutation s'est déroulée correctement.Compilez maintenant votre programme avec
la source
Votre ubuntu a définitivement une version suffisamment récente de g ++. Le drapeau à utiliser est
-std=c++0x
.la source
I'm using Ubuntu 12.04.
dans la question.Si vous souhaitez conserver les extensions du compilateur GNU, utilisez -std = gnu ++ 0x plutôt que -std = c ++ 0x. Voici une citation de la page de manuel:
la source
?:
opérateur binaire ? La seule autre extension qui me vient à l'esprit, les expressions de structure, est remplacée par l'initialisation de la liste C ++ 11. Dans tous les cas, cette citation concerne principalement C, pas C ++.Vous pouvez vous référer au lien suivant pour lequel les fonctionnalités sont prises en charge dans une version particulière du compilateur. Il a une liste exhaustive de prise en charge des fonctionnalités dans le compilateur. Apparemment, GCC suit de près la norme et l'implémente avant tout autre compilateur.
Concernant votre question, vous pouvez compiler en utilisant
g++ -std=c++11
pour C ++ 11g++ -std=c++14
pour C ++ 14g++ -std=c++17
pour C ++ 17g++ -std=c++2a
pour C ++ 20, bien que toutes les fonctionnalités de C ++ 20 ne soient pas encore prises en charge, reportez-vous à ce lien pour obtenir la liste des fonctionnalités dans GCC.La liste change assez rapidement, gardez un œil sur la liste, si vous attendez qu'une fonctionnalité particulière soit prise en charge.
la source