Tag: constexpr
constexpr ist ein modifier eingeführt, die in C++11, die informiert den compiler, dass der Wert einer Funktion oder variable bekannt ist oder berechnet werden kann zur compile-Zeit. Als solche, es kann verwendet werden als Konstante in Orten, wo es sonst nicht sein könnte.
3
Antworten
Ich bin auf der Suche zum erstellen einer lookup-Tabelle der Koordinaten, so etwas wie: int a[n][2] = {{0,1},{2,3}, ... } Für einen bestimmten n, angelegt werden zur compile-Zeit. Ich suchte in constexpr, aber scheint wie eine Funktion
1
Antworten
==> Siehe das code-snippet und Zusammenstellung auf coliru. Ich habe eine LiteralType Klasse Füllung constexpr Anforderungen: struct MyString { constexpr MyString(char const* p, int s) : ptr(p), sz(s) {} constexpr char const* data() const { return ptr;
4
Antworten
Dies funktionierte vor einigen Wochen: template <typename T, T t> T tfunc() { return t + 10; } template <typename T> constexpr T func(T t) { return tfunc<T, t>(); } int main() { std::cout << func(10) <<
3
Antworten
Betrachten Sie den folgenden code: static constexpr int make_const(const int i){ return i; } void t1(const int i) { constexpr int ii = make_const(i); //error occurs here (i is not a constant expression) std::cout<<ii; } int main()
1
Antworten
constexpr - Funktionen sind nicht enthalten soll: Definition einer Variablen von nicht-wörtliche Art Aber in diese Antwort ein lambda-Ausdruck definiert ist, in einem: https://stackoverflow.com/a/41616651/2642059 template <typename T> constexpr auto make_div(const T quot, const T rem) { return
3
Antworten
Hier ist mein code: class test{ public: constexpr test(){ } constexpr int operator+(const test& rhs){ return 1; } }; int main(){ test t; //constexpr word isn't necessary constexpr int b = t+test(); //works at compile time! int
6
Antworten
Lassen Sie mich beginnen mit der Feststellung, meine Absicht. In den alten (C++) Tage, wir hätten einen code wie: class C { public: enum {SOME_VALUE=27}; }; Dann könnten wir SOME_VALUE überall in unserem code einen compile-Zeit-Konstante und
2
Antworten
Ich bin derzeit am erstellen einer Klasse mit einem constexpr Konstruktor und ich Frage mich, ob ich verwenden kann, ein std::array zum speichern der Daten dieser Klasse. Hat der standard explizit angeben, dass eine std::array hat eine
3
Antworten
Jede Funktion, die aus einer return-Anweisung nur deklariert werden könnte constexpr und somit erlauben werden zur Kompilierzeit ausgewertet, wenn alle Argumente sind constexpr und nur constexpr Funktionen werden aufgerufen, in Ihren Körper. Gibt es einen Grund, nicht
2
Antworten
Da es möglich ist, dass eine Funktion deklariert als constexpr aufgerufen werden können, während der Laufzeit, unter welche Kriterien muss der compiler entscheiden, ob, um zu berechnen, es zur compile-Zeit oder zur Laufzeit? template<typename base_t, typename expo_t>
1
Antworten
Gibt es einen Unterschied zwischen Deklaration von Gleitkomma-Konstante als static constexpr variable und eine Funktion wie im Beispiel unten, oder ist es nur eine Frage des Stils? class MY_PI { public: static constexpr float MY_PI_VAR = 3.14f;
5
Antworten
Wie Sie wahrscheinlich wissen, ist C++11 bietet die constexpr Stichwort. C++11 eingeführt, das Schlüsselwort constexpr, die es dem Anwender erlaubt garantieren, dass eine Funktion oder ein Objekt Konstruktor ist eine compile-Zeit konstant. [...] Dies ermöglicht es dem
1
Antworten
Dies ist gültig-code: struct S { constexpr S(int x, int y): xVal(x), yVal(y) {} constexpr S(int x): xVal(x) {} constexpr S() {} const int xVal { 0 }; const int yVal { 0 }; }; Aber hier
2
Antworten
Hintergrund Für eine lange Zeit, gcc zur Verfügung gestellt hat eine Reihe von builtin-bit-twiddling-Funktionen, insbesondere die Anzahl der Leerzeichen am Anfang und Ende 0-bits (auch für long unsigned und long long unsigned, die Suffixe l und ll):
3
Antworten
Wo sollte ich lieber mit Makros und wo sollte ich lieber constexpr? Sind Sie nicht im Grunde das gleiche? #define MAX_HEIGHT 720 vs constexpr unsigned int max_height = 720; AFAIK constexpr bietet mehr Sicherheit geben Ganz einfach:
7
Antworten
Was ist der Unterschied zwischen constexpr und const? Wann kann ich die Verwendung nur einer von Ihnen? Wann kann ich beide verwenden und wie soll ich mich entscheiden? constexpr erzeugt einen compile-Zeit-Konstante; const bedeutet einfach, dass der
6
Antworten
Ich will eine static const char array in meiner Klasse. GCC beschwert und sagte mir, ich sollte verwenden constexpr, obwohl jetzt ist es mir zu sagen, es ist eine Undefinierte Referenz. Wenn ich den array nicht-Mitglied dann
2
Antworten
Ich versuche zu erklären, constexpr-Zeiger initialisiert, um einen Konstanten integer-Wert, aber das Geräusch ist Folierung alle meine versuche: Versuch 1: constexpr int* x = reinterpret_cast<int*>(0xFF); test.cpp:1:20: note: reinterpret_cast is not allowed in a constant expression Versuch 2:
3
Antworten
in der Englische Wikipedia-Seite über C++11, können wir Lesen, dass: Vor C++11, die Werte von Variablen, die verwendet werden könnten, in Konstante Ausdrücke nur, wenn die Variablen deklariert sind const, eine Initialisierung, die ein konstanter Ausdruck sein,
4
Antworten
struct Test { static const int value = () -> int { return 0; } (); }; Mit gcc-4.6 bekomme ich so etwas wie error: function needs to be constexpr. Ich habe versucht, mehrere Kombinationen von putting
1
Antworten
Ich denke, dass in C++14 mehr restrictives entfernt von constexpr. Aber nach N3797 7.1.5 3-punct: Die definition eines contexpr Funktion shal erfüllen die folgenden Einschränkungen: es darf nicht sein, virtuelle der Rückgabetyp ist ein literal-Typ; jedem Ihrer
4
Antworten
Ich bin Herumspielen mit einigen Spielzeug-code mit c++11, um herauszufinden, ein wenig mehr darüber, wie die Dinge funktionieren. Während dieser kam ich über das folgende Problem, das vereinfacht sich auf: template <int x, int y> class add
5
Antworten
Ist es möglich, concat zwei string-Literale mit einem constexpr? Oder anders gesagt, kann man beseitigen-Makros in code wie: #define nl(str) str "\n" int main() { std::cout << nl("usage: foo") nl("print a message") ; return 0; } Update:
4
Antworten
Diese constexpr code nicht kompiliert in Visual Studio 2013 version 12.0.21005.1 REL Gibt es eine neuere Visual Studio-compiler, der mit constexpr? #include <iostream> constexpr int factorial(int n) { return n <= 1 ? 1 : (n *
4
Antworten
In diesem trivialen Beispiel test2 nicht kompiliert werden, obwohl test1 gelingt, und ich sehe nicht, warum das der Fall ist. Wenn arr[i] geeignet ist für einen Rückgabewert aus einer Funktion markiert constexpr kann, warum kann es nicht
1
Antworten
Betrachten Sie die folgenden inline-Funktion : //Inline specifier version #include<iostream> #include<cstdlib> inline int f(const int x); inline int f(const int x) { return 2*x; } int main(int argc, char* argv) { return f(std::atoi(argv[1])); } und die constexpr
4
Antworten
Möchte ich zum Auffüllen der ein array von enum mit constexpr. Der Inhalt des Arrays folgt einem bestimmten Muster. Ich habe eine enum-Trennung-ASCII-Zeichensatz in vier Kategorien. enum Type { Alphabet, Number, Symbol, Other, }; constexpr Type table[128]
4
Antworten
Anforderungen Möchte ich ein constexpr Wert (z.B. eine compile-Zeit-Konstante) berechnet aus einer constexpr Funktion. Und ich möchte diese beiden bezieht sich auf den namespace einer Klasse, d.h. eine statische Methode und eine statische member der Klasse. Ersten
2
Antworten
Für definieren compile-Zeit-Konstanten der integralen Typen wie die folgende (bei Funktion und Klasse scope), die syntax ist am besten? static const int kMagic = 64; //(1) constexpr int kMagic = 64; //(2) (1) funktioniert auch für C++98/03-Compiler,
3
Antworten
Jede Funktion, die aus einer return-Anweisung nur deklariert werden könnte constexpr und somit erlauben werden zur Kompilierzeit ausgewertet, wenn alle Argumente sind constexpr und nur constexpr Funktionen werden aufgerufen, in Ihren Körper. Gibt es einen Grund, nicht
1
Antworten
Wenn ich eine variable innerhalb einer Funktion (etwa ein großes array), macht es Sinn es zu erklären, sowohl static und constexpr? constexpr garantiert, dass das array erstellt wird zur compile-Zeit, so wäre die static nutzlos sein? void
4
Antworten
Gibt es einen Unterschied zwischen den folgenden Definitionen? const double PI = 3.141592653589793; constexpr double PI = 3.141592653589793; Wenn nicht, welcher Stil bevorzugt wird in C++11? InformationsquelleAutor der Frage fredoverflow | 2012-11-12
4
Antworten
Ich will eine static const char array in meiner Klasse. GCC beschwert und sagte mir, ich sollte verwenden constexprobwohl jetzt ist es mir zu sagen, es ist eine Undefinierte Referenz. Wenn ich den array nicht-Mitglied dann kompiliert.
1
Antworten
Ich Frage mich, ob es möglich ist, zu überprüfen, ob die 2 Typen sind die gleichen, die zur Kompilierzeit. Was ich kam mit ist(idk wenn es funktioniert, weil es fühlt sich hackish-und IDK-standard, gut so IDK was
7
Antworten
Hallo, ich Lerne C++11, Frage ich mich, wie man eine constexpr 0 bis n-array, zum Beispiel: n = 5; int array = {0 ... n}; also array kann {0, 1, 2, 3, 4, 5} InformationsquelleAutor der Frage
6
Antworten
Ich versuche zu berechnen, die Länge von einem string-literal zur compile-Zeit. Zu tun, so verwende ich folgenden code: #include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; }
2
Antworten
Wie man richtig machen eine static_assert innerhalb einer constexpr Funktion? Zum Beispiel: constexpr int do_something(int x) { static_assert(x > 0, "x must be > 0"); return x + 5; } Dies ist kein gültiges C++11 code, weil
4
Antworten
struct Test { static const int value = () -> int { return 0; } (); }; Mit gcc-4.6 bekomme ich so etwas wie error: function needs to be constexpr. Ich habe versucht, mehrere Kombinationen von putting
4
Antworten
Ich bin kompilieren Sie das folgende einfache Programm mit g++-4.6.1 --std=c++0x: #include <algorithm> struct S { static constexpr int X = 10; }; int main() { return std::min(S::X, 0); }; Bekomme ich die folgende linker-Fehler: /tmp/ccBj7UBt.o: In
2
Antworten
Ich geschrieben habe etwas code zu werfen const char* zu int mithilfe constexpr und somit kann ich mit einem const char* als ein template-argument. Hier ist der code: #include <iostream> class conststr { public: template<std::size_t N> constexpr
13
Antworten
Scheint es mir, dass mit einer "Funktion, die immer wieder 5" bricht oder die Verdünnung der Bedeutung von "eine Funktion aufrufen". Es muss einen Grund oder eine Notwendigkeit für diese Fähigkeit oder es wäre nicht in C++11.
3
Antworten
Mit C++11, Ubuntu 14.04, GCC-Standard-toolchain. Dieser code nicht: constexpr std::string constString = "constString"; Fehler: der Typ 'const string {aka const std::basic_string}' von constexpr variable 'constString' ist nicht wörtlich gemeint... weil... 'std::basic_string' hat einen nicht-trivialen Destruktor Ist es