Вопросы с тегом «constexpr»

constexpr - это модификатор, введенный в C ++ 11, который сообщает компилятору, что значение функции или переменной известно или может быть вычислено во время компиляции. Таким образом, его можно использовать как константу там, где иначе и быть не могло.


14
Когда следует использовать возможность constexpr в C ++ 11?
Мне кажется, что наличие «функции, которая всегда возвращает 5» нарушает или ослабляет значение «вызова функции». Должна быть причина, или необходимость в этой возможности, иначе ее не будет в C ++ 11. Почему это там? // preprocessor. #define MEANING_OF_LIFE 42 // constants: const int MeaningOfLife = 42; // constexpr-function: constexpr int …
337 c++  c++11  constexpr 


2
Имеет ли смысл статическая переменная constexpr внутри функции?
Если у меня есть переменная внутри функции (скажем, большой массив), имеет ли смысл объявлять ее одновременно staticи constexpr? constexprгарантирует, что массив создается во время компиляции, так что staticбудет бесполезно? void f() { static constexpr int x [] = { // a few thousand elements }; // do something with the …
193 c++  static  c++11  constexpr 

6
Неопределенная ссылка на статический constexpr char []
Я хочу иметь static const charмассив в моем классе. GCC пожаловался и сказал мне, что я должен использовать constexpr, хотя теперь он говорит мне, что это неопределенная ссылка. Если я сделаю массив не членом, он будет скомпилирован. Что происходит? // .hpp struct foo { void bar(); static constexpr char baz[] …

4
Можно ли использовать std :: string в constexpr?
Использование C ++ 11, Ubuntu 14.04, GCC по умолчанию . Этот код не работает: constexpr std::string constString = "constString"; ошибка: тип 'const string {aka const std :: basic_string}' переменной constexpr 'constString' не является литералом ... потому что ... 'std :: basic_string' имеет нетривиальный деструктор Можно ли использовать std::stringв constexpr? (очевидно …

2
Подразумевает ли constexpr встроенный?
Рассмотрим следующую встроенную функцию: // 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])); } и версия, эквивалентная constexpr: // Constexpr specifier version #include<iostream> #include<cstdlib> constexpr int f(const int x); constexpr int …

2
Что значит «отравить функцию» в C ++?
В самом конце выступления Скотта Шурра «Представляем constexpr» на CppCon он спрашивает: «Есть ли способ отравить функцию»? Затем он объясняет, что это можно сделать (хотя и нестандартным способом): Ввод throwв constexprфункцию Объявление неразрешенной extern const char* Ссылаясь на нерешенные externвthrow Я чувствую, что здесь я немного не в себе, но …
96 c++  constexpr 

6
Вычисление длины строки C во время компиляции. Это действительно constexpr?
Я пытаюсь вычислить длину строкового литерала во время компиляции. Для этого я использую следующий код: #include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); } Все работает как положено, программа выводит 4 и …


3
Как я могу получить глубину многомерного std :: vector во время компиляции?
У меня есть функция, которая принимает многомерный std::vectorи требует, чтобы глубина (или количество измерений) передавалась как параметр шаблона. Вместо жесткого кодирования этого значения я хотел бы написать constexprфункцию, которая будет принимать std::vectorи возвращать глубину как unsigned integerзначение. Например: std::vector<std::vector<std::vector<int>>> v = { { { 0, 1}, { 2, 3 } …

1
Счетчики времени компиляции C ++, вновь
TL; DR Прежде чем пытаться прочитать весь этот пост, знайте, что: решение поставленной проблемы было найдено мной , но я все еще хочу знать, является ли анализ правильным; Я упаковал решение в fameta::counterкласс, который решает несколько оставшихся уловок. Вы можете найти это на github ; Вы можете видеть это на …

1
Любые ошибки заменить глобальный const char [] на constexpr string_view?
Наша команда работает с базой кода C ++ более 10 лет и недавно перешла на компилятор C ++ 17. Поэтому мы ищем способы модернизировать наш код. В ходе конференции на YouTube я услышал предложение заменить const char*глобальные строки на constexpr string_view. Поскольку const char*в нашем коде есть довольно много таких …

1
std :: pair <auto, auto> тип возвращаемого значения
Я играл с autoв std::pair. В приведенном ниже коде функция fдолжна возвращать std::pairтипы, которые зависят от параметра шаблона. Рабочий пример: Пример 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}; // …

2
Почему std :: swap не помечен как constexpr до C ++ 20?
В C ++ 20 std::swapстановится constexprфункцией. Я знаю, что стандартная библиотека действительно отстала от языка в маркировке вещей constexpr, но к 2017 году &lt;algorithm&gt;была в значительной степени консекстом, как и куча других вещей. Пока - std::swapнет. Я смутно помню, что был какой-то странный дефект языка, который мешал этой маркировке, но …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.