Описание тега constexpr

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

Делает ли указание constexpr на конструктор автоматически превращает все созданные из него объекты в constexpr?

Вот мой код: class test{ public: constexpr test(){ } constexpr int operator+(const test& rhs){ return 1; } }; int main(){ test t; //constexpr word isn't necessary constexpr int b = t+test(); // works at compile time! int w = 10; // ERROR constex…
13 июл '15 в 04:21
1 ответ

clang 3.5 constexpr несоответствие - ошибки при использовании double, но не int

После ответа с использованием математических констант boost в constexpr и предложения OP использовать шаблонную функцию boost для constexpr вместо переменной без шаблонов для подавления ошибки лягушки, я решил попытаться выяснить, при каких условиях…
10 фев '14 в 23:36
2 ответа

Почему мой второй фрагмент ниже показывает неопределенное поведение?

И то и другое clang а также g++ похоже, что он соответствует последней версии параграфа [expr.const]/5 в стандарте C++. Следующий фрагмент выводит 11 для обоих компиляторов. Смотрите живой пример: #include <iostream> void f(void) { static int …
01 янв '16 в 13:09
2 ответа

Ошибка MSVC с массивом constexpr в качестве нетипового параметра шаблона

Я пытаюсь понять, является ли то, что я вижу, ошибкой компилятора MSVC или недоразумением с моей стороны. Я пытаюсь использовать простой строковый литерал шаблона времени компиляции, например, так: constexpr const char teststr[] = "teststr"; templat…
3 ответа

C++17: использование std::option для оценки, содержит ли enum значение

Я хотел бы проверить во время компиляции, если различные перечисления содержат данное значение, поэтому я написал следующее: #include <optional> enum class test_enum : int { VALUE_0 = 0, VALUE_1 = 1 }; // Template function to perform check tem…
03 окт '18 в 18:19
2 ответа

Использование delete для предотвращения вызова с недопустимыми значениями в C++14

Я могу использовать шаблоны и удалить средство, чтобы предотвратить вызов факториала с символьными или плавающими переменными следующим образом. Как написать функцию удаления для факториалов с отрицательными аргументами? template <typename T> …
01 сен '17 в 08:17
8 ответов

Можно ли узнать, когда constexpr действительно является constexpr?

Начиная с расширенных версий constexpr (я думаю, от C++14), вы можете объявить функции constexpr, которые могли бы использоваться как "реальные" constexpr, то есть код, выполняемый во время компиляции, или может вести себя как встроенные функции. Ит…
24 окт '17 в 20:37
2 ответа

Построение массива const из constexpr

Предположим, у меня есть следующий закрытый constexpr в классе: static constexpr uint16_t square_it(uint16_t x) { return std::pow(x, 2); } Затем я хочу построить массив статических констант из этих значений для целых чисел до 255 в том же разделе то…
20 мар '16 в 18:40
0 ответов

Определение статического const как constexpr

struct CL { static const int i; }; constexpr int CL::i{}; Есть ли действительная замена const на constexpr в определении i? Какой параграф в Стандарте может решить это?
30 май '16 в 15:28
2 ответа

Почему эта статическая функция-член constexpr не вызывается как constexpr при вызове?

Почему это constexpr static функция-член, определяемая //! Nah комментарий, не рассматривается как constexpr когда звонили? struct Item_id { enum Enum { size, position, attributes, window_rect, max_window_size, _ }; static constexpr int n_items_ = _…
12 май '16 в 17:56
2 ответа

Почему статическая переменная-член constexpr не может быть передана в функцию?

Следующий код производит undefined reference to 'Test::color', #include <iostream> struct Color{ int r,g,b; }; void printColor(Color color) { //printing color } class Test { static constexpr Color color = {242,34,4}; public: void print(){ prin…
16 сен '18 в 14:44
2 ответа

Я не наблюдаю значимого преимущества оптимизации constexpr

Спасибо, мне не нужна книга, чтобы научить меня constexpr средства. я преподаю constexpr и мой простой пример не убедил студентов, почему они должны использовать преимущество вычисления времени компиляции через constexpr, Также, пожалуйста, строго и…
19 фев '18 в 05:18
1 ответ

Constexpr string_view сравнение

У меня есть небольшая программа, которая компилируется на GCC но не на MSVCкакой компилятор не соответствует стандарту для constexpr string_view сравнение? #include <iostream> #include <string_view> int main(int argc, char **argv) { cons…
11 апр '18 в 13:28
1 ответ

Переопределить для константных выражений?

Можно ли переопределить функцию и / или шаблон в зависимости от того, является ли что-то постоянным выражением? По сути, я хотел бы создать строковый класс, который, если передаст статическую строку или переменную constexpr, указывающую на нее, буде…
14 мар '13 в 18:03
1 ответ

Передача объектов constexpr вокруг

Я решил дать тогда новый C++14 значение constexpr Я решил написать небольшой синтаксический анализатор строк во время компиляции. Тем не менее, я борюсь с сохранением моего объекта в constexpr при передаче его функции. Рассмотрим следующий код: #inc…
04 дек '14 в 10:42
2 ответа

Проверка уникальности символов во время компиляции

Можно ли в C++11 (не позднее) написать функцию, которая проверяет уникальность символов, переданных ей во время компиляции verify('a'); verify('b'); verify('c'); verify('a'); //should cause compilation error [Редактировать М.К., чтобы ответить на не…
30 янв '18 в 22:25
2 ответа

Внутренняя ошибка компилятора VS2015 при вызове метода constexpr базового класса

Следующий код выдает внутреннюю ошибку компилятора (VS2015) struct A { constexpr A(){} constexpr int bar() { return 3; } }; struct B : A { constexpr B(){} constexpr int foo() { return A::bar(); } }; int main() { constexpr B b; constexpr int dummy = …
09 май '15 в 12:08
2 ответа

Обфусцировать std::array используя constexpr

Я ищу небольшую функцию, которая может преобразовать std::array добавляя увеличивающиеся значения. Функция должна быть функцией времени компиляции. Мне удалось написать небольшую функцию constexpr, которая делает это для массива длиной 3, но я не см…
2 ответа

Параметр строки константного выражения в функции C++11 constexpr

Я пытаюсь сделать constexpr функция, которая преобразует строку UUID как "f6ece560-cc3b-459a-87f1-22331582216e" в классе что-то вроде этого: class UUID { public: explicit UUID(uint8_t bytes[]); // Must be 16 byte array. Вот что у меня так далеко: //…
20 мар '15 в 12:18
0 ответов

Временная сложность выделения неинициализированной памяти в стеке в функции constexpr?

Обычно, если программа на C++ выделяет большой массив в стеке, большая часть которого в конечном итоге не инициализируется, я бы сказал, что получение этого массива по сути бесплатное (вы просто перемещаете указатель стека или еще много чего) и плат…