Вопросы по теме 'constant-expression'

Подробности того, что составляет постоянное выражение в C?
C определяет как минимум 3 уровня «постоянного выражения»: постоянное выражение (неквалифицированное) арифметическое постоянное выражение целочисленное постоянное выражение 6.6 пункт 3 гласит: Постоянные выражения не должны...
1967 просмотров

Почему этот константный аргумент не может соответствовать параметру шаблона, отличному от типа?
При компиляции приведенного ниже кода с помощью gcc я получаю сообщение об ошибке: 'i' не может появляться в константном выражении. Почему это? #include <iostream> using namespace std; template<int p> class C { public: void...
104 просмотров
schedule 12.03.2023

Избыточные экземпляры в логических константных выражениях
У меня есть n-любая логическая OR функция времени выполнения any_run #include <assert.h> bool any_run() { return false; } template <typename... B> bool any_run(bool a, B... b) { assert(a); return a || any_run(b...); }...
104 просмотров

Инициализация статического члена в классе
Дано struct X {}; constexpr auto x = X{}; struct S { static constexpr auto& rx = x; }; gcc 4.8 говорит ошибка: непостоянная инициализация в классе недействительна для статического члена 'S::rx' static constexpr auto& rx...
624 просмотров

Почему лямбда-выражения не разрешены в неоцененных операндах, но разрешены в неоцененных частях константных выражений?
Если мы посмотрим на черновик стандарта C ++ в разделе 5.1.2 Лямбда-выражения в параграфе 2 говорится ( курсив мой в будущем ): Оценка лямбда-выражения приводит к временному значению prvalue (12.2). Этот временный объект называется...
9219 просмотров
schedule 18.05.2022

В выражениях #if и #elif что определяется префиксом для имен и что с идентификаторами, включая ключевые слова C, заменяемые на 0?
Я попытался обдумать это, но сдался. Не могли бы вы объяснить следующее, взятое из книги C Майка Банахана (Раздел 7.3. 7 Условная компиляция) . Несмотря на многочисленные попытки, я не могу понять часть после "Последовательность токенов, которая...
298 просмотров

Почему в C ++ 11 было снято ограничение на присутствие оператора запятой в константном выражении?
Недавно, когда отвечая на вопрос , я понял, что оператор запятой разрешен в постоянном выражении в C ++ 11 , если выражение заключено в () , например: int a[ (1, 2) ] ; Pre C ++ 11 it запрещено использовать оператор запятой в...
800 просмотров

Не удается создать литерал списка в F#
У меня есть следующие типы type StatusCode = | OK = 200 | NoContent = 204 | MovedTemp = 301 | MovedPerm = 302 | SeeOther = 303 | NotModified = 304 | NotFound = 404 | ServerError = 500...
605 просмотров

Можно ли использовать assert в постоянных выражениях?
Макрос assert из <cassert> обеспечивает краткий способ проверки выполнения условия. Если аргумент оценивается как true , он не должен иметь никаких дальнейших эффектов. Однако можно ли в этом случае также использовать его вызов внутри...
331 просмотров

Как заставить компилятор GCC вычислять константы во время компиляции с помощью -Os
Я попытался вычислить хэши для постоянных C-строк во время компиляции с помощью макросов. Это мой пример кода: #include <stddef.h> #include <stdint.h> typedef uint32_t hash_t; #define hash_cstr(s) ({ \...
1590 просмотров

Шаблоны, массивы и постоянные выражения
Рассмотрим код ниже: template<char> struct S { }; template<int N> constexpr auto f(const char (&ref) [N]) { return S<ref[0]>{}; } int main() { constexpr auto v = f("foo"); (void)v; } Он не компилируется,...
77 просмотров

Почему я не могу превратить эту строку в литерал?
Мне нужно преобразовать строку в литерал, чтобы я мог передать ее в качестве аргумента CsvProvider. Но я не могу этого сделать. Код ниже работает без проблем: open System.IO open FSharp.Data open FSharp.Data.JsonExtensions let charSwitch (a:...
430 просмотров
schedule 03.07.2023

Почему функция constexpr для ссылки не constexpr?
Рассмотрим следующую функцию: template <size_t S1, size_t S2> auto concatenate(std::array<uint8_t, S1> &data1, std::array<uint8_t, S2> &data2) { std::array<uint8_t, data1.size() + data2.size()> result; auto...
607 просмотров

Реализация макроса __is_constexpr (ICE_P) ядра Linux на чистом C++
После прочитав стандартную версию C11 предиката ICE_P Мартина Юкера, я попытался реализовать его на чистом C++. Версия C11, использующая выбор _Generic , выглядит следующим образом: #define ICE_P(x) _Generic((1? (void *) ((x)*0) : (int *)...
263 просмотров

Использование String.join в постоянном выражении
У меня есть очень длинная константа String , которая используется для аннотации, и эта строка по существу представляет собой список, разделенный запятыми. Я хотел бы иметь возможность сделать следующее: String str = String.join(", ", "abc",...
261 просмотров

Строка С# должна быть константой
Я писал этот кусок кода: public const int MAJOR_VERSION = 3; public const int MINOR_VERSION = 3; public const string VERSION_STRING = $"v.{MAJOR_VERSION}{MINOR_VERSION}"; И, что неудивительно, компилятор жаловался: "Выражение, присваиваемое...
398 просмотров
schedule 18.11.2022

Как понять, что полное выражение предложения должно быть константным выражением, указанным в стандарте.
Ранее, некоторые правила в стандарте гласят, что они применяются к выражению , я был смущен тем, могут ли эти правила также произвольно применяться к полному выражению . Я получаю ответы на этот вопрос . Однако в стандарте есть некоторые правила,...
287 просмотров