Вопросы по теме 'constexpr'

Действительно ли нужен constexpr?
Я смотрю на новую функцию constexpr C++ и не совсем понимаю ее необходимость. Например, следующий код: constexpr int MaxSize() { ... return ...; } void foo() { int vec[MaxSize()]; } можно заменить на: int MaxSize() {...
7152 просмотров
schedule 19.02.2023

Проверка порядка байтов во время компиляции: корректна ли эта функция constexpr в соответствии со стандартом?
После некоторого поиска способа проверки endianess во время компиляции я придумал следующее решение: static const int a{1}; constexpr bool is_big_endian() { return *((char*)&(a)) == 1; } GCC принимает этот код только в некоторых...
1546 просмотров
schedule 14.03.2023

Инициализировать массив с помощью constexpr?
Интересно, можно ли инициализировать весь массив с помощью функции constexpr (с C++ 2011). Здесь у меня есть кое-что, чтобы проиллюстрировать то, что я хочу сделать: template<unsigned int DIM> const unsigned int...
3055 просмотров
schedule 12.06.2022

Заполнение массива с помощью Constexpr во время компиляции
Я хотел бы заполнить массив enum с помощью constexpr. Содержимое массива следует определенному шаблону. У меня есть перечисление, разделяющее набор символов ASCII на четыре категории. enum Type { Alphabet, Number, Symbol,...
17805 просмотров
schedule 19.05.2023

Перечисление C ++ 11 с членами класса и оптимизацией времени компоновки constexpr
В моем проекте у меня много перечислений, которым необходимо иметь дополнительные атрибуты, связанные с членами перечисления, и вспомогательные статические методы, связанные с типом перечисления. Насколько мне известно, это невозможно сделать со...
1593 просмотров
schedule 20.05.2023

Какая самая эффективная функция проверки простых чисел с хвостовой рекурсией известна?
Я экспериментировал с метапрограммированием до этого момента: // compiled on Ubuntu 13.04 with: // clang++ -O3 -ftemplate-depth-8192 -fconstexpr-depth=4096 -std=c++11 -stdlib=libc++ -lcxxrt -ldl compile-time-primes.cpp -o compile-time-primes //...
633 просмотров

clang 3.3 и GCC 4.7 const v constexpr
Я просто попытался скомпилировать довольно большой объем кода, используя clang 3.3 с заголовочными файлами стандартной библиотеки GCC 4.7.3 в Ubuntu 13.04. Все прошло хорошо, кроме одной проблемы. Этот код уже компилируется со стандартным пакетом...
1317 просмотров
schedule 27.01.2023

Почему constexpr не работает автоматически?
Насколько я понимаю, constexpr можно рассматривать как подсказку компилятору, чтобы проверить, могут ли данные выражения быть оценены во время компиляции, и, если возможно, сделать это. Я знаю, что это также накладывает некоторые ограничения на...
622 просмотров
schedule 09.03.2024

Почему MSVC++11 отклоняет квалификацию функции constexpr?
Итак, играя с constexpr, MSVC (Visual Studio 2012) выдал мне ошибку при попытке квалифицировать мою функцию с помощью ключевого слова constexpr с помощью этой простой программы (включая опущенные): constexpr int factorial(int n) { return n...
7653 просмотров
schedule 21.05.2023

Можно ли вызвать исключение из тернарного оператора?
Иногда удобно или даже необходимо иметь функцию, состоящую всего из одного оператора (это необходимо при возврате constexpr ). Если необходимо проверить условие и разрешен только один оператор, единственным вариантом является условный оператор. В...
1596 просмотров
schedule 27.02.2023

Как реализовать конструктор копирования std::Optional?
Я реализую std::optional , но столкнулся с проблемой с одним из его конструкторы копирования . Вот набросок моей реализации: #include <type_traits> template<typename T> class optional { public: constexpr optional()...
693 просмотров
schedule 25.02.2024

конструктор constexpr с проверкой времени компиляции
Я хотел бы создать класс с опцией constexpr-ness. И, конечно же, я хотел бы воспользоваться проверкой ошибок во время компиляции. Каждая constexpr функция, включая конструктор, должна работать также во время выполнения, когда заданные параметры...
4651 просмотров
schedule 02.03.2022

Почему я могу вызывать функцию, не относящуюся к constexpr, внутри функции constexpr?
Рассмотрим следующий код: #include <stdio.h> constexpr int f() { return printf("a side effect!\n"); } int main() { char a[f()]; printf("%zd\n", sizeof a); } Я ожидал, что компилятор будет жаловаться на вызов printf...
6618 просмотров
schedule 16.04.2023

Можно ли изменить нестатическую переменную-член в конструкторе constexpr (C ++ 14)?
struct A { int a = 0; constexpr A() { a = 1; } }; constexpr bool f() { constexpr A a; static_assert(a.a == 1, ""); // L1: OK return a.a == 1; } static_assert(f(), ""); // L2: Error, can not modify A::a in constexpr...
2744 просмотров
schedule 24.05.2022

Обертка Constexpr над массивом C с конструкторами, подобными std::vector
Мне нужна оболочка constexpr над массивом C или std::array с некоторыми дополнительными конструкторами (аналогично конструкторам std::vector ): template<class T, int N> struct wrapper { T data[N]; constexpr wrapper(int s); //...
1422 просмотров
schedule 06.09.2023

Передача объектов constexpr вокруг
Затем я решил опробовать новое C++14 определение constexpr и, чтобы получить от него максимальную отдачу, я решил написать небольшой анализатор строк во время компиляции. Однако я изо всех сил пытаюсь сохранить свой объект constexpr при...
1155 просмотров
schedule 20.10.2023

массив constexpr объектов constexpr с использованием move ctor
У меня есть класс с конструктором значений constexpr , но нет копирования или перемещения ctor class C { public: constexpr C(int) { } C(const C&) = delete; C& operator=(const C&) = delete; }; int main()...
578 просмотров
schedule 13.06.2024

Почему `std::initializer_list` не определен как литеральный тип?
Это продолжение этого вопроса: Это законно ли объявлять объект constexpr initializer_list? . Начиная с C++14, все методы класса std::initializer_list помечены знаком constexpr . Кажется естественным иметь возможность инициализировать...
3335 просмотров

С++ 11 получить длину строки во время компиляции с помощью constexpr
#include <stdio.h> constexpr size_t constLength(const char* str) { return (*str == 0) ? 0 : constLength(str + 1) + 1; } int _tmain(int argc, _TCHAR* argv[]) { const char* p = "1234567"; size_t i = constLength(p);...
4811 просмотров
schedule 23.09.2022

Почему компилятор разрешает доступ к массиву за пределами границ даже с индексом constexpr?
Например, если у нас есть std::array , и мы создаем экземпляр элемента, который выходит за границы, используя constexpr , компилятор не сообщит об ошибке: constexpr int EvaluateSpecialArrayIndex(int a) { return a * sizeof(int); } array<int,...
2063 просмотров
schedule 17.02.2023