Als «constexpr» getaggte Fragen

constexpr ist ein in C ++ 11 eingeführter Modifikator, der den Compiler darüber informiert, dass der Wert einer Funktion oder Variablen bekannt ist oder zur Kompilierungszeit berechnet werden kann. Als solches kann es als Konstante an Orten verwendet werden, an denen es sonst nicht möglich wäre.

337
Wann sollten Sie die constexpr-Funktion in C ++ 11 verwenden?

Es scheint mir, dass eine "Funktion, die immer 5 zurückgibt" die Bedeutung von "Aufrufen einer Funktion" bricht oder verwässert. Es muss einen Grund oder eine Notwendigkeit für diese Funktion geben, sonst wäre es nicht in C ++ 11. Warum ist es dort? // preprocessor. #define MEANING_OF_LIFE 42 //...

105
Bedeutet constexpr Inline?

Betrachten Sie die folgende 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 äquivalente Version: //...

96
Was bedeutet es, eine Funktion in C ++ zu vergiften?

Ganz am Ende von Scott Schurrs Vortrag "Introducing constexpr" auf der CppCon fragt er: "Gibt es eine Möglichkeit, eine Funktion zu vergiften?" Er erklärt dann, dass dies (wenn auch nicht auf standardmäßige Weise) getan werden kann durch: Einfügen throweiner constexprFunktion Ungelöst erklären...

93
Constexpr vs Makros

Wo sollte ich Makros bevorzugen und wo sollte ich constexpr bevorzugen ? Sind sie nicht im Grunde gleich? #define MAX_HEIGHT 720 vs. constexpr unsigned int max_height = 720;

16
std :: pair <auto, auto> Rückgabetyp

Ich habe mit autoin herumgespielt std::pair. Im folgenden Code soll die Funktion feinen std::pairTyp zurückgeben, der von einem Vorlagenparameter abhängt. Ein Arbeitsbeispiel: BEISPIEL 1 template <unsigned S> auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else...

13
Wie kann ein const expr so schnell ausgewertet werden?

Ich habe const-Ausdrücke ausprobiert, die zur Kompilierungszeit ausgewertet werden. Aber ich habe mit einem Beispiel gespielt, das unglaublich schnell erscheint, wenn es zur Kompilierungszeit ausgeführt wird. #include<iostream> constexpr long int fib(int n) { return (n <= 1)? n :...

11
Kann Span constexpr sein?

Alle Konstruktoren von std :: span sind als constexpr deklariert, aber ich kann anscheinend keinen von ihnen dazu bringen, in einem constexpr-Kontext zu arbeiten. Das Kommentieren eines der folgenden Constexpr führt zu einem Kompilierungsfehler. #include <array> #include <span> int...