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.


14
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 // constants: const …
337 c++  c++11  constexpr 




4
Ist es möglich, std :: string in einem constexpr zu verwenden?
Unter Verwendung von C ++ 11, Ubuntu 14.04, GCC Standard-Toolchain . Dieser Code schlägt fehl: constexpr std::string constString = "constString"; Fehler: Der Typ 'const string {aka const std :: basic_string}' der constexpr-Variablen 'constString' ist nicht wörtlich ... weil ... 'std :: basic_string' einen nicht trivialen Destruktor hat Ist es möglich, …

2
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: // Constexpr specifier version #include<iostream> #include<cstdlib> constexpr int f(const int x); …

2
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 extern const char* Referenzierung der ungelösten externin derthrow …
96 c++  constexpr 

6
Berechnen der Länge eines C-Strings zur Kompilierungszeit. Ist das wirklich ein constexpr?
Ich versuche, die Länge eines String-Literals zur Kompilierungszeit zu berechnen. Dazu verwende ich folgenden Code: #include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); } Alles funktioniert wie erwartet, das Programm druckt 4 …

3
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;
93 c++  c++11  macros  constexpr 

3
Wie kann ich die Tiefe eines mehrdimensionalen std :: vector zur Kompilierungszeit ermitteln?
Ich habe eine Funktion, die mehrdimensional ist std::vectorund erfordert, dass die Tiefe (oder die Anzahl der Dimensionen) als Vorlagenparameter übergeben wird. Anstatt diesen Wert fest zu codieren, möchte ich eine constexprFunktion schreiben , die die std::vectorund die Tiefe als unsigned integerWert zurückgibt . Zum Beispiel: std::vector<std::vector<std::vector<int>>> v = { { …



1
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 &lt;unsigned S&gt; auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr (S == 2) return std::pair{1.0, …

2
Warum ist std :: swap nicht vor C ++ 20 als constexpr markiert?
In C ++ 20 std::swapwird eine constexprFunktion. Ich weiß, dass die Standardbibliothek beim Markieren von Dingen wirklich hinter der Sprache zurückgeblieben ist constexpr, aber bis 2017 &lt;algorithm&gt;war sie ziemlich genau wie eine Reihe anderer Dinge. Noch std::swapnicht. Ich erinnere mich vage an einen seltsamen Sprachfehler, der diese Markierung verhindert, aber …

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.