Pytania otagowane jako 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.


14
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 = 42; // constexpr-function: constexpr int …
337 c++  c++11  constexpr 


2
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 }; // do something with the array …
193 c++  static  c++11  constexpr 

6
Niezdefiniowane odniesienie do static constexpr char []
Chcę mieć static const chartablicę w mojej klasie. GCC narzekało i powiedziało mi, że powinienem skorzystać constexpr, chociaż teraz mówi mi, że to niezdefiniowane odniesienie. Jeśli ustawię tablicę jako nie będącą członkiem, wówczas się kompiluje. Co się dzieje? // .hpp struct foo { void bar(); static constexpr char baz[] = …

4
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 nietrywialny destruktor Czy można użyć std::stringw constexpr? (najwyraźniej …

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

2
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 char* Odwoływanie się do nierozwiązanych externwthrow Czuję, że trochę mi tu brakuje głębi, ale …
96 c++  constexpr 

6
Obliczanie długości łańcucha C w czasie kompilacji. Czy to naprawdę constexpr?
Próbuję obliczyć długość literału ciągu w czasie kompilacji. Aby to zrobić, używam następującego kodu: #include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); } Wszystko działa zgodnie z oczekiwaniami, program wypisuje 4 i …

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

3
Jak uzyskać głębokość wielowymiarowego std :: vector w czasie kompilacji?
Mam funkcję, która przyjmuje wielowymiarowość std::vectori wymaga podania głębokości (lub liczby wymiarów) jako parametru szablonu. Zamiast na stałe wpisywać tę wartość, chciałbym napisać constexprfunkcję, która pobierze std::vectori zwróci głębokość jako unsigned integerwartość. Na przykład: std::vector<std::vector<std::vector<int>>> v = { { { 0, 1}, { 2, 3 } }, { { 4, …


1
Jakieś gotcha zastępujące globalną const char [] constexpr string_view?
Nasz zespół pracuje z ponad 10-letnią bazą kodu C ++, a ostatnio przeszedł na kompilator C ++ 17. Szukamy więc sposobów modernizacji naszego kodu. Podczas konferencji na YouTube usłyszałem sugestię zastąpienia const char*globalnych ciągów constexpr string_view. Ponieważ const char*w naszym kodzie mamy całkiem sporo takich globalnych stałych ciągów, chcę zapytać, …

1
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 &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.0}; // pair of …

2
Dlaczego std :: swap nie jest oznaczony constexpr przed C ++ 20?
W C ++ 20 std::swapstaje się constexprfunkcją. Wiem, że standardowa biblioteka naprawdę pozostawała w tyle za językiem w oznaczaniu rzeczy constexpr, ale do 2017 r. &lt;algorithm&gt;Była prawie niezrozumiała, podobnie jak wiele innych rzeczy. A jednak - std::swapnie było. Niejasno pamiętam jakąś dziwną wadę językową, która uniemożliwia to oznakowanie, ale zapominam …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.