Pytania oznaczone «constexpr»

constexpr to modyfikator wprowadzony w C ++ 11, który informuje kompilator, że wartość funkcji lub zmiennej jest znana lub może zostać obliczona w czasie kompilacji. W związku z tym może być używany jako stała w miejscach, w których inaczej by nie było.

337
Kiedy należy używać funkcji constexpr w C ++ 11?

Wydaje mi się, że posiadanie „funkcji, która zawsze zwraca 5”, łamie lub osłabia znaczenie „wywoływania funkcji”. Musi być jakiś powód lub potrzeba takiej możliwości, inaczej nie byłoby w C ++ 11. Dlaczego tam jest // preprocessor. #define MEANING_OF_LIFE 42 // constants: const int MeaningOfLife...

193
Czy zmienna static constexpr w funkcji ma sens?

Jeśli mam zmienną wewnątrz funkcji (powiedzmy, dużą tablicę), czy sens ma deklarowanie jej jednocześnie statici constexpr? constexprgwarantuje, że tablica jest tworzona w czasie kompilacji, więc czy staticbyłaby bezużyteczna? void f() { static constexpr int x [] = { // a few thousand elements...

175
Czy można użyć std :: string w constexpr?

Używając C ++ 11, Ubuntu 14.04, domyślnego łańcucha narzędzi GCC . Ten kod nie działa: constexpr std::string constString = "constString"; błąd: typ 'const string {aka const std :: basic_string}' zmiennej constexpr 'constString' nie jest dosłowny ... ponieważ ... 'std :: basic_string' ma...

105
Czy constexpr oznacza inline?

Rozważ następującą wbudowaną funkcję: // 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])); } i odpowiednik w wersji constexpr: //...

96
Co to znaczy „zatruwać funkcję” w C ++?

Na samym końcu wystąpienia Scotta Schurra „Wprowadzenie constexpr” na CppCon pyta „Czy istnieje sposób na zatrucie funkcji”? Następnie wyjaśnia, że ​​można to zrobić (choć w niestandardowy sposób) poprzez: Umieszczenie throww constexprfunkcji Deklarowanie nierozwiązanego problemu extern const...

92
Constexpr a makra

Gdzie powinienem preferować używanie makr, a gdzie powinienem preferować constexpr ? Czy nie są w zasadzie takie same? #define MAX_HEIGHT 720 vs constexpr unsigned int max_height = 720;

16
typ zwracany std :: pair <auto, auto>

Grałem około z autow std::pair. W poniższym kodzie funkcja fpowinna zwracać std::pairtypy zależne od parametru szablonu. Przykład roboczy: PRZYKŁAD 1 template <unsigned S> auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr (S == 2) return...

13
Jak można tak szybko ocenić const expr

Próbowałem wyrażeń stałych, które są oceniane podczas kompilacji. Ale bawiłem się przykładem, który wydaje się niewiarygodnie szybki, gdy jest wykonywany w czasie kompilacji. #include<iostream> constexpr long int fib(int n) { return (n <= 1)? n : fib(n-1) + fib(n-2); } int main ()...

11
Czy rozpiętość może być constexpr?

Wszystkie konstruktory std :: span są zadeklarowane jako constexpr, jednak nie wydaje się, aby którykolwiek z nich działał w kontekście constexpr. Odznaczenie któregokolwiek z poniższych constexpr spowoduje błąd kompilacji. #include <array> #include <span> int main() { constexpr int...