2010-06-16 12 views

Antwort

10

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".

+2

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

+0

@Fred: Vielleicht unterstützt es dann niemand. Ich benutze gcc nicht oft genug, um viel über seine C++ 0x-Unterstützung zu erfahren, leider. –

+7

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

-3

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.

+3

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"). –

4

Ab Juli 2011 unterstützt gcc 4.7 constexpr. Sie müssen es jedoch von Svn bauen.

-9

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.

+0

'conexpr int Fakultät (int n) { Rückgabe n == 0? 1: n * Fakultät (n-1); } ist absolut gültig. –

Verwandte Themen