Вопросы по теме '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 просмотров
schedule
25.12.2023
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 просмотров
schedule
10.09.2023
С++ 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