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

129
голосов
1
ответ
Попытка создать член структуры с атрибутом constexpr без статичности приводит к ошибке компилятора (см. ниже). Почему это? для одного значения константы будет ли я иметь это значение в памяти до те...
1 месяц назад The Mask
74
голоса
1
ответ
Мне сложно понять, как этот код (пример из стандартного проекта С++ 14 [conv.lval]) вызывает поведение undefined для g(false) . Почему constexpr делает программу действительной? Кроме того, что озн...
1 месяц назад template boy
94
голоса
1
ответ
Это скорее философский вопрос, чем практический фрагмент кода, но, возможно, гуру С++ могут просветить меня (и извинения, если он уже задан). Я читал статью 15 в книге Meyers "Эффективный современн...
1 месяц назад RomanK
120
голосов
2
ответа
Но он компилируется в gcc 4.9.0. Смотрите живой пример : #include <iostream> struct A { constexpr A(): i(5) {} int&& f() { return std::move(i); } int i; } a; A&& f(A& a) {...
1 месяц назад Ayrosa
104
голоса
1
ответ
Я пытаюсь эмулировать структуры cons-cell такие как структуры списков, из языков функционального программирования, в C++, используя constexpr . Для начала у меня есть тип pair . Это владелец двух р...
1 месяц назад meguli
61
голос
1
ответ
Я пытаюсь изменить идиому is_detected чтобы разрешить передачу ему переменных аргументов. Мне это нужно, поскольку некоторые из моих обнаруженных функций-членов будут иметь предоставленные пользова...
1 месяц назад scx
177
голосов
1
ответ
У меня есть следующий код: class MyClass { static constexpr bool foo() { return true; } void bar() noexcept(foo()) { } }; Я бы ожидал, что поскольку foo() является функцией static constexpr , и пос...
1 месяц назад Kyle Strand
74
голоса
1
ответ
Мне нужна оболочка constexpr над массивом C или std::array с некоторыми дополнительными конструкторами (аналогичными конструкторам std::vector ): template<class T, int N> struct wrapper { T d...
1 месяц назад gnzlbg
177
голосов
1
ответ
К сожалению, я несколько смущен насчет constexpr , глобальных констант, объявленных в файлах заголовков, и odr. Короче: можем ли мы заключить здесь https://isocpp.org/files/papers/n4147.pdf что con...
1 месяц назад JohnB
76
голосов
1
ответ
У меня есть следующий класс constexpr из библиотеки, используемый для создания и управления представлением числа с плавающей запятой с фиксированной точкой: template< unsigned Integer, unsigned ...
1 месяц назад Bitrex
136
голосов
3
ответа
Когда я пытаюсь выполнить компиляцию следующего кода, я получаю ошибку компоновщика: Undefined symbols for architecture x86_64: "Foo()", referenced from: _main in main.o с помощью LLVM 4.2. Такое п...
1 месяц назад Aurelius
114
голосов
1
ответ
struct X { constexpr static char a1[] = "hello"; // Okay constexpr static const char* a2[] = {"hello"}; // Error }; int main(){} Компиляция с gcc дает ошибку: error: инициализатор, заключенный в фи...
1 месяц назад Jesse Good
105
голосов
1
ответ
У меня есть следующая программа: #include <iostream> void Init(); struct Foo { Foo() { int *p = new int; // just to make sure Foo ctor is not a constant expression Init(); } } foo; struct Bar...
1 месяц назад undermind
97
голосов
4
ответа
Возможности С++ 11 с пакетами аргументов constexpr и шаблона должны, на мой взгляд, быть достаточно сильными, чтобы выполнять довольно сложные вычисления. Одним из возможных примеров, для которых у...
1 месяц, 1 неделя назад MvG
242
голоса
1
ответ
Рассмотрим следующий фрагмент, чтобы проверить предстоящие объявления декомпозиции функций С++ 17 (ранее известные как структурированные привязки) #include <cassert> #include <utility> ...
1 месяц, 1 неделя назад TemplateRex
96
голосов
3
ответа
Я прочитал все ответы, связанные с этой проблемой, но, честно говоря, я не уверен, полностью ли я понял решение. Я использую С++ 11. Давайте скажем, что я действительно хотел бы объявить что-то вро...
1 месяц, 1 неделя назад Jacinto Resende
85
голосов
1
ответ
Кажется, мне разрешено явно устанавливать конструктор по умолчанию constexpr с неинициализированным членом тогда и только тогда, когда struct является шаблоном. Это верно, даже если создается шабло...
1 месяц, 1 неделя назад xaxazak
85
голосов
2
ответа
возьмем следующий код: class const_int {
1 месяц, 1 неделя назад Drax
74
голоса
1
ответ
Я хотел бы захватить целые числа постоянной времени компиляции, переданные функции в шаблонные типы. Будущая цель состоит в том, чтобы свернуть собственный (очень ограниченный) шаблон выражения, ко...
1 месяц, 1 неделя назад NickV
61
голос
2
ответа
У меня есть функции, которые объявлены с constexpr спецификатора constexpr и я уже проверял, что они будут оцениваться во время компиляции в модульных тестах. Теперь я хочу использовать дезинфициру...
1 месяц, 1 неделя назад Thorum357
148
голосов
2
ответа
Можно ли во время компиляции определить, являются ли "аргументы функции" 1 константами времени компиляции? Например, функция print(int i) , которая может печатать "constant 5" , если она называется...
1 месяц, 1 неделя назад BeeOnRope
112
голосов
1
ответ
#include <iostream> union gc_bits { size_t value; struct { size_t arena : 2; } bits; constexpr gc_bits(size_t value_) : value(value_) { } }; static constexpr size_t get_max_arenas() { return ...
1 месяц, 1 неделя назад DrPizza
105
голосов
3
ответа
(Это своего рода проблема XY , но несите меня.) Я получаю предупреждение о компиляции о том, что сумма сдвига слишком велика. Теперь, чтобы диагностировать это, я хотел бы, чтобы мой компилятор как...
1 месяц, 1 неделя назад einpoklum
104
голоса
1
ответ
Я обнаружил ошибку в GCC 6 и 7 (не в GCC 5) внутри функций constexpr, что приводит к разным результатам, если либо функция получает оценки во время компиляции (неправильный результат), либо время в...
1 месяц, 1 неделя назад Viatorus
85
голосов
1
ответ
Рассмотрим приведенный ниже код: struct foo { int bar(int, int = 0) { return 0; } }; constexpr auto ptr = &foo::bar; int main() { return (foo{}.*ptr)(0); } Как и ожидалось, этот код не скомпили...
1 месяц, 1 неделя назад Barrett Adair
134
голоса
3
ответа
Этот код компилируется с помощью clang и gcc. template<size_t n> struct N { static constexpr size_t v = n; }; template<size_t n> constexpr bool operator<(N<n>, size_t n2) { ret...
1 месяц, 1 неделя назад Antoine Morrier
61
голос
1
ответ
Я пытаюсь поиграть с constexpr и static_assert. Мне действительно нужно проверить длину строки constexpr, которая вычисляется по выделенной функции. Вот что я пытаюсь запустить: #include <iostre...
1 месяц, 1 неделя назад Antoine Morel
180
голосов
2
ответа
Это справедливо, поскольку выражению constexpr разрешено принимать значение "glvalue типа literal, который ссылается на энергонезависимый объект, определенный с помощью constexpr, или который относ...
1 месяц, 1 неделя назад Potatoswatter
128
голосов
2
ответа
Я пытаюсь реализовать следующее: #include <array> #include <cstdint> class Class2 { }; class Class1 { public: static constexpr uint8_t GetMax() { return 5; } static constexpr uint8_t Ge...
1 месяц, 1 неделя назад Mark Ingram
95
голосов
2
ответа
Недавно я столкнулся с довольно многими ситуациями, когда Именованный Иерархический Параметр был бы полезен, но я бы хотел, чтобы он был гарантирован во время компиляции. Стандартный метод возврата...
1 месяц, 1 неделя назад Sam Cristall
74
голоса
1
ответ
Кто-нибудь, пожалуйста, объясните: 1) почему код ниже не работает на CLang и 2) как его следует переписать для совместимости с CLang? using LinkWeight = float; template <bool WEIGHTED=true> s...
1 месяц, 1 неделя назад luart
221
голос
2
ответа
Учитывая две программы, в которых единственной разницей в исходном коде является наличие или отсутствие одного constexpr , возможно ли, что значение программы изменится? Другими словами, если бы бы...
1 месяц, 1 неделя назад Aaron McDaid
290
голосов
2
ответа
Так как возможно, что во время выполнения может быть вызвана функция, объявленная как constexpr, по каким критериям компилятор решает, следует ли вычислять ее во время компиляции или во время выпол...
1 месяц, 1 неделя назад Ansgar Dabs
96
голосов
1
ответ
Я хочу вычислить таблицу поиска во время компиляции для математической функции в заданном диапазоне и затем извлекать значения из таблицы во время выполнения. Мой код выглядит следующим образом: #i...
1 месяц, 1 неделя назад greg
201
голос
2
ответа
Можно ли создать C-строки или std::string как constexpr или они должны быть созданы во время выполнения? С gcc 4.9.2 я могу это сделать: constexpr const char foo[] = "blee"; (К сожалению, ноябрьски...
1 месяц, 2 недели назад Jonathan Mee
61
голос
1
ответ
Я пытаюсь инициализировать static constexpr std::vector std::string внутри моего класса Foo . Позднее я буду использовать адрес его элементов. class Foo { public: static constexpr std::vector<st...
1 месяц, 2 недели назад TMS
74
голоса
1
ответ
Возможный дубликат: Может ли строковый литерал быть индексированным в постоянном выражении? Если я индексирую строковый литерал, является ли результатом константа времени компиляции? Другими словам...
1 месяц, 2 недели назад Fanael
96
голосов
1
ответ
Я замечаю, что typeid(T) обеспечивает хороший совместимый с constexpr способ получения уникального идентификатора для данного класса во время компиляции. Это очень полезно, но я замечаю, что реляци...
1 месяц, 2 недели назад paul
122
голоса
3
ответа
Рассмотрим следующий код: template <int N, typename T> void f(T) { } template <typename T> constexpr int k(T&) { return 0; } int main() { constexpr auto i = 1; f<k(i)>([&i...
1 месяц, 2 недели назад Vittorio Romeo
-4
голоса
3
ответа
Constexpr не оценивается во время компиляции, как показано в сборке (инструкция CALL), почему? (Используя последний gcc, который поставляется с кодовыми блоками (g++ 4.7.1) с -std = С++ 11)
1 месяц, 2 недели назад Oded
Чтобы , пожалуйста,
Выберите тему жалобы:

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