Je veux jouer avec consexpr code>, est-ce qu'un compilateur le supporte encore? p>
4 Réponses :
Le projet Apache STDCXX a Une belle table détaillant les fonctionnalités C ++ 0x sont prises en charge par laquelle compilateurs . Il a été mis à jour régulièrement et couvre la plupart des compilateurs modernes C ++. P>
entre cette liste et ce qui a été dit dans les commentaires, il apparaît que la réponse est "non" p> selon cela, seul GCC 4.5 prend en charge consexpr code> (note que ce support peut être expérimental). s> p>
Tableau officiel de support GCC indique que consexpr code> n'est pas pris en charge du tout. Mon code compile avec
consexpr code>, mais il semble avoir aucun effet que ce soit. Ma première hypothèse est que le mot clé est simplement ignoré?
@Fred: Peut-être que personne ne le supporte alors. Je n'utilise pas la GCC assez souvent pour en savoir beaucoup sur son soutien C ++ 0X, tristement.
Il suffit de tester sur g ++ (GCC) 4.6.0 20100605 - Impossible de créer une matrice de taille renvoyée par une fonction ConstExpr. Lecture de Bugzilla, il apparaît à la syntaxe introduite par GCC 4.5, mais pas (encore) sémantique.
La version publiée de GCC4.6 a maintenant consexpr code> prise en charge.
convenu, g ++ 4.5 et 4.6 prennent en charge le mot-clé, mais ignorez les implications. Je viens de compiler un programme factorial simple (sur les deux versions à l'aide de -std = c ++ 0x) avec la ligne: et il compilé et couru, mais lors de l'examen de la source ASM (-S Option ) Il a montré que la fonction a été appelée avec le paramètre au lieu d'être déterminée par le compilateur. p> p>
La réponse est inutile sans montrer votre programme de test. Votre description sonne comme si vous avez mal compris consexpr code> (et la définition de fonction que vous indiquez n'est pas valide C ++. C ++ n'a pas de "Implicit int").
à partir de juillet 2011, GCC 4.7 prend en charge la consexpr. Vous devez le construire de SVN cependant. P>
L'utilisation de "consexpr" est vraiment facile. Regardez cette pièce de code:
constexpr int get_five(){ return 5;}
consexpr int factorielle (int n) {retour n == 0? 1: N * factorial (N-1); } code> est parfaitement valide.