Ich möchte mit constexpr
spielen, unterstützt irgendein Compiler es noch?Unterstützt ein Compiler bereits conexpr?
Antwort
Das Apache Stdcxx Projekt hat a nice table detailing which C++0x features are supported by which compilers. Es wurde regelmäßig aktualisiert und deckt die meisten modernen C++ - Compiler ab.
Entsprechend unterstützt nur GCC 4.5 constexpr
(beachten Sie, dass diese Unterstützung experimentell sein kann).
Zwischen dieser Liste und dem, was in den Kommentaren gesagt wurde, erscheint die Antwort "nein".
Vereinbart, g ++ 4.5 und 4.6 unterstützen das Schlüsselwort, ignorieren aber die Implikationen. Ich habe gerade ein einfaches faktorielles Programm kompiliert (auf beiden Versionen mit -std = C++ 0x) mit der Zeile:
constexpr fact(int i) { return (i>1) ? fact(i-1)*i : 1; }
und es kompiliert und lief aber wenn die asm Quelle untersuchen (Option -S) zeigte die Die Funktion wurde mit dem Parameter aufgerufen, anstatt vom Compiler festgelegt zu werden.
Die Antwort ist nutzlos ohne Ihr Testprogramm zu zeigen. Ihre Beschreibung klingt, als ob Sie "constexpr" falsch verstanden haben (und die von Ihnen gezeigte Funktionsdefinition ist nicht gültig C++. C++ hat kein "implizites int"). –
Ab Juli 2011 unterstützt gcc 4.7 constexpr. Sie müssen es jedoch von Svn bauen.
Die Verwendung von "Constexpr" ist wirklich einfach. Schauen Sie sich dieses Stück Code:
constexpr int get_five(){
return 5;}
Diese Funktion gibt immer 5, so kann es mit „constexpr“ Schlüsselwort deklariert werden. Die faktorielle Funktion gibt den Wert abhängig vom Argument zurück, so dass die "Ausgabe" nicht immer gleich ist.
'conexpr int Fakultät (int n) { Rückgabe n == 0? 1: n * Fakultät (n-1); } ist absolut gültig. –
- 1. conexpr und CRTP: Compiler-Diskrepanz
- 2. conexpr voreingestellt Standardkonstruktoren
- 3. Warum muss conexpr statisch sein?
- 4. Wie erkennt man, ob ein Compiler static_assert unterstützt?
- 5. Wie ein JIT-Compiler die Leistung von Anwendungen unterstützt?
- 6. conexpr Void-Funktion abgelehnt
- 7. Wie effektiv conexpr Funktionen debuggen?
- 8. C++ conexpr Schlüsselwortplatzierung
- 9. conexpr Vorlage Argument Verrücktheit
- 10. C++ 17 make_optional conexpr-
- 11. Bedeutet conexpr keine Ausnahme?
- 12. Präprozessordirektiven, die vom RIM-Compiler unterstützt werden
- 13. conexpr Funktion Parameter als Vorlage Argumente
- 14. Metaprogrammierung mit conexpr oder struct
- 15. Erkennung von conexpr mit SFINAE
- 16. conexpr - warum nur eine Rückmeldung?
- 17. const vs conexpr auf Variablen
- 18. Wie kann der Parameter einer conexpr-Funktion unbenutzt markiert werden?
- 19. C++ - Compiler, der alle C++ 11-Parallelitätsfunktionen unterstützt?
- 20. Welcher Compiler wird mit Funktionszeiger mit Standardargumenten unterstützt?
- 21. Unterschied zwischen const und conexpr arrays
- 22. Wie kann ich überprüfen, ob ein bestimmter Typ bereits im C-Compiler definiert ist?
- 23. Wie funktioniert ein Haskell-Compiler?
- 24. Was ist ein guter C# Compiler-Compiler/Parser Generator?
- 25. Rails - Ein Server bereits läuft
- 26. Welche Datentypen unterstützt ein SharedObject?
- 27. Unterstützt ein Webhosting-Dienst, der Python unterstützt, auch Django?
- 28. Kann ich ein bereits bestehendes div an ein bereits bestehendes div anhängen?
- 29. Sollte conexpr Initialisierung vor der anderen Initialisierung passieren
- 30. Warum sollte ein Compiler diese Assembly generieren?
Die [offizielle GCC-Unterstützungstabelle] (http://gcc.gnu.org/projects/cxx0x.html) besagt, dass "constexpr" überhaupt nicht unterstützt wird. Mein Code kompiliert zwar mit "constexpr", scheint aber keinerlei Wirkung zu haben. Meine erste Vermutung ist, dass das Keyword einfach ignoriert wird? – fredoverflow
@Fred: Vielleicht unterstützt es dann niemand. Ich benutze gcc nicht oft genug, um viel über seine C++ 0x-Unterstützung zu erfahren, leider. –
Nur getestet auf g ++ (GCC) 4.6.0 20100605 - kann immer noch kein Array mit der von einer constexpr-Funktion zurückgegebenen Größe erstellen. Beim Lesen von Bugzilla scheint GCC 4.5 Syntax eingeführt zu haben, aber (noch) keine Semantik. – Cubbi