Constexpr – вопросы и ответы

71
голос
3
ответа
Примечание: это Q & A не о Mersenne twister , а номера Mersenne . Я хочу вычислить во время компиляции массив размером N, содержащий числа Мерсенна (2 n - 1) для n в [0, N - 1].
5 месяцев, 3 недели назад Ilya Polishchuk
98
голосов
1
ответ
Для этого кода: struct S { S(int m): m(m) {} constexpr int f() const { return m; } int m; }; int main() { S s(1); } он компилируется без предупреждений или ошибок с помощью clang 3.6, 3.7 и 3.8 с -...
5 месяцев, 3 недели назад M.M
119
голосов
3
ответа
Я хочу проверить, что заданная переменная double/float имеет фактический шаблон бит 0x0. Не спрашивайте, почему, он использовал в функции Qt ( qIsNull() ), что я хотел бы быть constexpr . В исходно...
5 месяцев, 3 недели назад Marc Mutz - mmutz
69
голосов
1
ответ
У меня очень простой проект, который создает нечетное поведение в VS2015: #include "Vec2f.h" #include "StaticRendercomponent.h" int main(int argc, char** argv) { constexpr Vec2f position(0.0f, 0.0f...
5 месяцев, 3 недели назад loaner9
105
голосов
1
ответ
У меня есть этот код, который работает... пока что так хорошо: struct _TYPEIDSTR {}; typedef _TYPEIDSTR *TYPE_ID; template<class T> _TYPEIDSTR _TYPE_ID; template<class T> constexpr TYPE...
5 месяцев, 3 недели назад Max
68
голосов
1
ответ
Чтобы проверить некоторые многомерные структуры, необходимо сформировать многомерные индексы времени компиляции, чтобы полностью охватить все возможные случаи. Я ищу недорогой способ компиляции, чт...
5 месяцев, 3 недели назад Orient
82
голоса
1
ответ
Мне любопытно, почему проверка типа терпит неудачу, когда он пересылается с использованием функции constexpr. Я предполагаю, что это имеет какое-то отношение к подстановке, но точно не знает, из-за...
5 месяцев, 3 недели назад Pascalau Razvan
69
голосов
1
ответ
Я хочу создать класс с такими методами, как std::map , но он должен быть отсортирован во время компиляции. Какие контейнеры constexpr подходят для хранения template<class K> ключей template&l...
5 месяцев, 3 недели назад InFamous X
89
голосов
1
ответ
Лучше ли объявлять конструктор по умолчанию, который: Выделяет значения по умолчанию для данных члена и объявляется constexpr, или оставляет все данные членов неопределенными? Я имею в виду главным...
5 месяцев, 3 недели назад Dale
280
голосов
3
ответа
Любая функция, состоящая только из оператора return, может быть объявлена constexpr и, таким образом, позволит оцениваться во время компиляции, если все аргументы constexpr , и только функции const...
5 месяцев, 3 недели назад Lars
154
голоса
5
ответов
Интересно, можно ли для длинных циклов использовать хвостовую рекурсию для constexpr в С++ 11?
5 месяцев, 3 недели назад Johannes Schaub - litb
89
голосов
1
ответ
Я использую Visual Studio 2013 + CTP. Я определил следующую функцию: constexpr DWORD const_getHash(const char *str, DWORD curHash = 0) { return !*str ? curHash : const_getHash(str + 1, (curHash >...
5 месяцев, 3 недели назад Kiuhnm
226
голосов
3
ответа
Я хотел бы, чтобы класс C имел статический член constexpr типа C. Возможно ли это в С++ 11? Попытка 1: struct Foo { constexpr Foo() {} static constexpr Foo f = Foo(); }; constexpr Foo Foo::f; g++ 4...
5 месяцев, 3 недели назад ndkrempel
68
голосов
1
ответ
Я искал, как сделать таблицу поиска, и нашел этот простой и элегантный ответ. Я не хотел прокручивать нитку, поэтому я решил задать новый вопрос. При попытке скомпилировать этот ответ в VS2015 я по...
5 месяцев, 3 недели назад val
69
голосов
1
ответ
Я знаю, что мой код должен работать в С++ 14, но мне нужно реплицировать это поведение в С++ 11, я не смог сделать эквивалентный init() может ли кто-нибудь помочь? enum MyEnum { BANANA, APPLE, PINE...
5 месяцев, 3 недели назад Wagner Gascho
-6
голосов
1
ответ
Я пытаюсь объявить constexpr и выдает ошибки компиляции. static constexpr float goBaseMovementSpeed = (1.135f / 440.f); Почему эта строка не работает? ошибка C2144: синтаксическая ошибка: 'float' д...
5 месяцев, 3 недели назад ioanb7
88
голосов
4
ответа
Возьмем следующий пример constexpr: #include <iostream> constexpr int fib(const int i) { if (i == 0) return 0; if (i == 1) return 1; return fib(i-1) + fib(i-2); } int main(){ std::cout <&l...
5 месяцев, 3 недели назад Trevor Hickey
70
голосов
1
ответ
Я использую "фиксированный тип списка времени компиляции" для моего проекта. Недавно я протестировал этот проект на совместимость с разными компиляторами, и я заметил, что clang (3.8) не может ском...
5 месяцев, 3 недели назад Matyro
211
голосов
2
ответа
Я пытаюсь использовать лямбда как статический член, например: struct A { static constexpr auto F = [](){}; }; int main() { A::F(); return 0; } Это даже правильный код С++ 11? На clang, я получаю эт...
5 месяцев, 3 недели назад Paul Fultz II
99
голосов
1
ответ
Предположим, что у меня есть массив constexpr (известной границы) статической продолжительности хранения: constexpr T input[] = /* ... */; И у меня есть шаблон выходного класса, которому нужен паке...
5 месяцев, 3 недели назад Andrew Tomazos
58
голосов
3
ответа
Следующий код не компилируется с GCC 5.2 (С++ 14). Он компилируется с clang 3.6 (С++ 14). (исходный код можно найти
5 месяцев, 3 недели назад Lingxi
118
голосов
2
ответа
Я читал этот вопрос о SO. Сам вопрос не так интересен, но мне было интересно, существует ли он и как реализовать решение времени компиляции. Что касается первой последовательности: Все числа, кроме...
5 месяцев, 3 недели назад Biagio Festa
81
голос
2
ответа
Где в стандарте С++ 14 запрещается ли объявление объекта a ниже? class A{ int i = 1; public: A():i{1}{} }; int main() { constexpr A a{}; } См. Живой пример Обратите внимание, что я выделил объявлен...
5 месяцев, 3 недели назад Ayrosa
80
голосов
1
ответ
Строго в соответствии с правилами С++ 14, по крайней мере те, которые заданы cppreference.com , не являются строкой ( 1) постоянное выражение? constexpr const int* addr(const int& ir) { return ...
5 месяцев, 3 недели назад Peregring-lk
184
голоса
2
ответа
Мне интересно, почему целое число ii инициализируется во время компиляции, но не float ff здесь: int main() { const int i = 1; constexpr int ii = i; const float f = 1.0; constexpr float ff = f; } Э...
5 месяцев, 3 недели назад Don Slowik
293
голоса
1
ответ
Это продолжение этого вопроса: Является ли законным объявление объекта constexpr initializer_list? . Так как С++ 14, класс std::initializer_list имеет все свои методы, помеченные constexpr . Кажетс...
5 месяцев, 3 недели назад ChristopherC
113
голосов
2
ответа
Рассмотрим следующие две программы: #include<variant> #include<iostream> constexpr auto f() { using T = std::variant<bool, int>; T t(false); t = T(true); return std::get<bool&g...
5 месяцев, 3 недели назад user10605163
69
голосов
2
ответа
Я пытаюсь понять пример, взятый из C++ Primer Book относительно инициализации массива. Они говорят, что Количество элементов в массиве является частью типа массивов. В результате измерение должно б...
5 месяцев, 3 недели назад gunnar.s
69
голосов
2
ответа
У меня есть проблема с загрузкой с константным элементом constexpr класса Bar который представляет собой массив самого Bar . Рассмотрим следующий совершенно правильный код: struct Foo { int i; stat...
5 месяцев, 3 недели назад hivert
112
голосов
2
ответа
Это случилось со многими людьми, и это случилось со мной. Я застрял, играя со строками времени компиляции в С++. Я решил использовать неприемлемый подход: используя классы template <char...> ...
5 месяцев, 3 недели назад Matteo Monti
137
голосов
1
ответ
Вы заменили бы const int one = 1; const int two = 2; с этим? constexpr int one = 1; constexpr int two = 2; Насколько я понимаю, что оба блока семантически идентичны и что в настоящее время это прос...
5 месяцев, 4 недели назад Philipp Claßen
57
голосов
1
ответ
От cppreference.com : Такой условный оператор обычно использовался в программировании С++ 11 constexpr до С++ 14. std::string str = 2+2==4 ? "ok" : throw std::logic_error("2+2 != 4"); К чему относи...
5 месяцев, 4 недели назад Peregring-lk
209
голосов
1
ответ
Я переношу кодовую базу С++ 14- constexpr от Clang до последнего g++ - 5.1. Рассмотрим приведенный ниже фрагмент кода самодельного класса bitset , который правильно компилируется с halcyon дней Cla...
5 месяцев, 4 недели назад TemplateRex
89
голосов
2
ответа
В следующем коде я создаю массив длиной 6 и инициализирую его 1, 2 и 3 в первых 3 элементах. Затем я копирую первые 3 элемента в последние 3 элемента. Затем я печатаю все элементы по порядку. std::...
6 месяцев назад Willy Goat
91
голос
1
ответ
У меня есть старый код, который использует что-то очень похожее на str_const описано здесь и здесь , чтобы выполнить некоторые операции с constexpr string. str_const<
6 месяцев назад Chris Beck
80
голосов
1
ответ
Игра с constexpr и union Я узнал, что я не могу изменить активный элемент union в constexpr . Только одно исключение: union пустых классов. constexpr bool t() { struct A {}; struct B {}; union U { ...
6 месяцев назад Orient
113
голосов
1
ответ
На этом сайте указано, что: "Функция constexpr должна удовлетворять следующим требованиям: [...] существует по крайней мере один набор значений аргументов, так что вызов функции может быть оцененны...
6 месяцев назад user42768
181
голос
3
ответа
Я обнаружил, что этот фрагмент кода не работает: typedef int (*fp)(int a, int b); constexpr fp addition() { return [](int a, int b){ return a+b; }; } #include <iostream> int main() { fp fun =...
6 месяцев назад milleniumbug
97
голосов
2
ответа
В книге "С++ Primer, 5th ed", раздел 2.4.4, весь раздел объясняет "constexpr". Затем в книге приведено упражнение, приведенное ниже: Упражнение 2.32: Является ли следующий код законным или нет? Есл...
6 месяцев назад modeller
89
голосов
1
ответ
Я пытаюсь использовать указатель ссылки constexpr для внешнего определенного объекта. hardware.h extern int crypticName; hardware.cpp #include "hardware.h" int crypticName; shared.h #include "hardw...
6 месяцев назад Cameron Tacklind
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема