Описание тега compile-time-constant

Используйте этот тег для вопросов, связанных с постоянной времени компиляции, постоянным значением, которое известно во время компиляции.
3 ответа

Передача шаблонного класса с константами в качестве аргумента

Мой шаблонный класс выглядит так: template<unsigned WIDTH, unsigned HEIGTH, typename T = int> class matrix { ... } Простые и понятные аргументы шаблона определяют размер матрицы. Размер логически постоянен, поэтому я реализовал его так, чтобы …
12 сен '14 в 19:47
1 ответ

Компиляторы C/C++, такие как GCC, обычно оптимизируют по модулю с постоянной степенью 2?

Допустим, у меня есть что-то вроде: #define SIZE 32 /* ... */ unsigned x; /* ... */ x %= SIZE; Будет ли x % 32 как правило, сводится к x & 31 большинством C/C++ компиляторов, таких как GCC?
3 ответа

Оцените все макросы в заголовочном файле C++

У меня есть требование создать автоматизированную систему для анализа файла C++ .h с большим количеством #define заявления в нем и сделать что-то со значением, которое каждый #define работает до. Файл.h содержит много другого мусора, кроме #define з…
3 ответа

Почему (постоянные) выражения не оцениваются во время компиляции в Haskell?

В настоящее время я изучаю Haskell, и есть одна вещь, которая сбивает меня с толку: Когда я создаю сложное выражение (чье вычисление займет некоторое время), и это выражение является константой (то есть оно строится только из известных, жестко закод…
2 ответа

Может быть, класс и дополнительные параметры

У меня есть реализация класса Maybe / Option в C#. Базовая реализация public delegate Maybe<TOutput> Converter<in TInput, out TOutput>(TInput input); public delegate TOutput ElseDelegate<out TOutput>(); public delegate Maybe<TOu…
5 ответов

Пользовательская литеральная строка: проверка длины во время компиляции

У меня есть пользовательский литеральный оператор, который имеет смысл только для строк определенной длины, например: constexpr uint16_t operator "" _int(const char* s, std::size_t len) { return len == 2 ? s[0] | (s[1] << 8) : throw; } Это раб…
1 ответ

Есть ли предупреждение о переполнении интегральной константы в clang?

Рассмотрим следующие фрагменты: short x = 2000000000; short x = (short)2000000000; int x = 1000000000 * 1000000000; Можем ли мы получить предупреждение (/error) для них в Clang? Как? Начиная с какой версии? Спасибо, Киприан.
4 ответа

Инициализировать переменную статически (во время компиляции)

1) У меня много констант в моем алгоритме. 2) мой код работает как с плавающей, так и с фиксированной точкой. Прямо сейчас эти константы инициализируются функцией float2fixed, в результате чего в плавающей точке она ничего не делает, а в фиксированн…
0 ответов

Сборка OpenCV 3.2.0 с MinGW-w64 6.1.0: возможность оценки аргументов во время компиляции

Компилятор терпит неудачу с этим выводом: In file included from C:/mingw-w64/x86_64-6.1.0-win32-seh-rt_v5-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/6.1.0/include/emmintrin.h:31:0, from C:/lib/opencv/sources/modules/core/include/opencv2/core/cvdef.h:16…
5 ответов

Разница между конечными переменными и постоянной времени компиляции

В чем разница между конечными переменными и константами времени компиляции? Рассмотрим следующий код final int a = 5; final int b; b=6; int x=0; switch(x) { case a: //no error case b: //compiler error } Что это значит? Когда и как конечным переменны…
09 мар '13 в 10:31
1 ответ

Оценка переменной Constexpr

Вот мой код, и мне нужно уточнить, что происходит: constexpr int funct(int x){ return x + 1; } int main(){ int x = funct(10); return 0; } constexprЭто позволяет рассчитать время компиляции, и на основе моего кода выше, так как funct объявлен как con…
2 ответа

Что значит сказать, что шаблоны int enum являются константами времени компиляции?

Это из эффективной Java Программы, использующие шаблон int enum, являются хрупкими. Поскольку перечисления int являются константами времени компиляции, они компилируются в клиенты, которые их используют. Кто-нибудь может объяснить, почему шаблон int…
2 ответа

Постоянные выражения из Enum

Есть ли способ преобразовать перечисление в константное выражение? Я хочу, чтобы мой оператор переключателя выбирал среди значений перечисления, но я получил ошибку компиляции "выражения выражений должны быть константными выражениями", поэтому я поп…
08 май '13 в 10:27
2 ответа

Почему Debug.WriteLine не работает без константы DEBUG?

Я столкнулся с проблемой, когда кто-то, по-видимому, отключил DEBUG а также TRACE константы в проекте C# .NET, над которым я работал, поэтому мои звонки Debug.WriteLine не имели никакого эффекта. (Вывод отладки не был показан в выводе.) После повтор…
06 июн '16 в 23:47
1 ответ

Невозможно создать список литералов в F#

У меня есть следующие типы type StatusCode = | OK = 200 | NoContent = 204 | MovedTemp = 301 | MovedPerm = 302 | SeeOther = 303 | NotModified = 304 | NotFound = 404 | ServerError = 500 [<Literal>] let NoBodyAllowedStatusCodes = [StatusCode.NoCo…
2 ответа

Постоянная времени компиляции

Я понял, что такое правило постоянной времени компиляции из констант и переменных времени компиляции. объявлен окончательным иметь примитивный или строковый тип инициализируется одновременно с объявлением инициализируется с постоянным выражением fin…
2 ответа

Ошибка в инициализаторе массива строк: элемент инициализатора не является константой

Мне нужно определить несколько строк и массив, инициализированный этими строками, доступными для использования различными частями программного обеспечения. Я думал, определив их в заголовочном файле следующим образом: //.h file const char *serviceSt…
10 янв '19 в 09:42
4 ответа

Почему std::string::max_size не является константой времени компиляции?

std::string обеспечивает max_size() метод определения максимального количества элементов, которые он может содержать. Однако, чтобы определить максимальную длину строки в целом, программист должен создать (возможно, пустой) строковый объект. Если эт…
30 окт '12 в 11:11
1 ответ

Почему std::is_copy_constructible не работает должным образом?

#include <type_traits> int main() { std::is_constructible_v<int&, const int&>; // false, as expected. std::is_copy_constructible_v<int&>; // true, NOT as expected! } Согласно cppref: Если T - объект или ссылочный тип и …
2 ответа

Константы во время компиляции

Кажется, мне не хватает чего-то довольно фундаментального. Я пытаюсь использовать члены массива const во время компиляции. const int list[3] = { 2, 5, 7 }; const int a = list[2]; // this doesn't error? template<int N1, int N2> struct tmax { en…
09 июн '12 в 23:10