Constexpr – вопросы и ответы
74
голоса
1
ответ
Мне сложно понять, как этот код (пример из стандартного проекта С++ 14 [conv.lval]) вызывает поведение undefined для g(false) . Почему constexpr делает программу действительной? Кроме того, что озн...
94
голоса
1
ответ
Это скорее философский вопрос, чем практический фрагмент кода, но, возможно, гуру С++ могут просветить меня (и извинения, если он уже задан). Я читал статью 15 в книге Meyers "Эффективный современн...
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) {...
104
голоса
1
ответ
Я пытаюсь эмулировать структуры cons-cell такие как структуры списков, из языков функционального программирования, в C++, используя constexpr . Для начала у меня есть тип pair . Это владелец двух р...
61
голос
1
ответ
Я пытаюсь изменить идиому is_detected чтобы разрешить передачу ему переменных аргументов. Мне это нужно, поскольку некоторые из моих обнаруженных функций-членов будут иметь предоставленные пользова...
177
голосов
1
ответ
У меня есть следующий код: class MyClass { static constexpr bool foo() { return true; } void bar() noexcept(foo()) { } }; Я бы ожидал, что поскольку foo() является функцией static constexpr , и пос...
74
голоса
1
ответ
Мне нужна оболочка constexpr над массивом C или std::array с некоторыми дополнительными конструкторами (аналогичными конструкторам std::vector ): template<class T, int N> struct wrapper { T d...
177
голосов
1
ответ
К сожалению, я несколько смущен насчет constexpr , глобальных констант, объявленных в файлах заголовков, и odr. Короче: можем ли мы заключить здесь https://isocpp.org/files/papers/n4147.pdf что con...
76
голосов
1
ответ
У меня есть следующий класс constexpr из библиотеки, используемый для создания и управления представлением числа с плавающей запятой с фиксированной точкой: template< unsigned Integer, unsigned ...
136
голосов
3
ответа
Когда я пытаюсь выполнить компиляцию следующего кода, я получаю ошибку компоновщика: Undefined symbols for architecture x86_64: "Foo()", referenced from: _main in main.o с помощью LLVM 4.2. Такое п...
114
голосов
1
ответ
struct X { constexpr static char a1[] = "hello"; // Okay constexpr static const char* a2[] = {"hello"}; // Error }; int main(){} Компиляция с gcc дает ошибку: error: инициализатор, заключенный в фи...
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...
97
голосов
4
ответа
Возможности С++ 11 с пакетами аргументов constexpr и шаблона должны, на мой взгляд, быть достаточно сильными, чтобы выполнять довольно сложные вычисления. Одним из возможных примеров, для которых у...
242
голоса
1
ответ
Рассмотрим следующий фрагмент, чтобы проверить предстоящие объявления декомпозиции функций С++ 17 (ранее известные как структурированные привязки) #include <cassert> #include <utility> ...
96
голосов
3
ответа
Я прочитал все ответы, связанные с этой проблемой, но, честно говоря, я не уверен, полностью ли я понял решение. Я использую С++ 11. Давайте скажем, что я действительно хотел бы объявить что-то вро...
85
голосов
1
ответ
Кажется, мне разрешено явно устанавливать конструктор по умолчанию constexpr с неинициализированным членом тогда и только тогда, когда struct является шаблоном. Это верно, даже если создается шабло...
85
голосов
2
ответа
возьмем следующий код: class const_int {
74
голоса
1
ответ
Я хотел бы захватить целые числа постоянной времени компиляции, переданные функции в шаблонные типы. Будущая цель состоит в том, чтобы свернуть собственный (очень ограниченный) шаблон выражения, ко...
61
голос
2
ответа
У меня есть функции, которые объявлены с constexpr спецификатора constexpr и я уже проверял, что они будут оцениваться во время компиляции в модульных тестах. Теперь я хочу использовать дезинфициру...
148
голосов
2
ответа
Можно ли во время компиляции определить, являются ли "аргументы функции" 1 константами времени компиляции? Например, функция print(int i) , которая может печатать "constant 5" , если она называется...
105
голосов
3
ответа
(Это своего рода проблема XY , но несите меня.) Я получаю предупреждение о компиляции о том, что сумма сдвига слишком велика. Теперь, чтобы диагностировать это, я хотел бы, чтобы мой компилятор как...
104
голоса
1
ответ
Я обнаружил ошибку в GCC 6 и 7 (не в GCC 5) внутри функций constexpr, что приводит к разным результатам, если либо функция получает оценки во время компиляции (неправильный результат), либо время в...
85
голосов
1
ответ
Рассмотрим приведенный ниже код: struct foo { int bar(int, int = 0) { return 0; } }; constexpr auto ptr = &foo::bar; int main() { return (foo{}.*ptr)(0); } Как и ожидалось, этот код не скомпили...
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...
61
голос
1
ответ
Я пытаюсь поиграть с constexpr и static_assert. Мне действительно нужно проверить длину строки constexpr, которая вычисляется по выделенной функции. Вот что я пытаюсь запустить: #include <iostre...
180
голосов
2
ответа
Это справедливо, поскольку выражению constexpr разрешено принимать значение "glvalue типа literal, который ссылается на энергонезависимый объект, определенный с помощью constexpr, или который относ...
128
голосов
2
ответа
Я пытаюсь реализовать следующее: #include <array> #include <cstdint> class Class2 { }; class Class1 { public: static constexpr uint8_t GetMax() { return 5; } static constexpr uint8_t Ge...
95
голосов
2
ответа
Недавно я столкнулся с довольно многими ситуациями, когда Именованный Иерархический Параметр был бы полезен, но я бы хотел, чтобы он был гарантирован во время компиляции. Стандартный метод возврата...
74
голоса
1
ответ
Кто-нибудь, пожалуйста, объясните: 1) почему код ниже не работает на CLang и 2) как его следует переписать для совместимости с CLang? using LinkWeight = float; template <bool WEIGHTED=true> s...
221
голос
2
ответа
Учитывая две программы, в которых единственной разницей в исходном коде является наличие или отсутствие одного constexpr , возможно ли, что значение программы изменится? Другими словами, если бы бы...
290
голосов
2
ответа
Так как возможно, что во время выполнения может быть вызвана функция, объявленная как constexpr, по каким критериям компилятор решает, следует ли вычислять ее во время компиляции или во время выпол...
96
голосов
1
ответ
Я хочу вычислить таблицу поиска во время компиляции для математической функции в заданном диапазоне и затем извлекать значения из таблицы во время выполнения. Мой код выглядит следующим образом: #i...
201
голос
2
ответа
Можно ли создать C-строки или std::string как constexpr или они должны быть созданы во время выполнения? С gcc 4.9.2 я могу это сделать: constexpr const char foo[] = "blee"; (К сожалению, ноябрьски...
61
голос
1
ответ
Я пытаюсь инициализировать static constexpr std::vector std::string внутри моего класса Foo . Позднее я буду использовать адрес его элементов. class Foo { public: static constexpr std::vector<st...
74
голоса
1
ответ
Возможный дубликат: Может ли строковый литерал быть индексированным в постоянном выражении? Если я индексирую строковый литерал, является ли результатом константа времени компиляции? Другими словам...
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...
-4
голоса
3
ответа
Constexpr не оценивается во время компиляции, как показано в сборке (инструкция CALL), почему? (Используя последний gcc, который поставляется с кодовыми блоками (g++ 4.7.1) с -std = С++ 11)
- Вопросы
- Constexpr