Есть ли способ заставить этот простой и понятный синтаксис инициализации работать с массивами (const) целых чисел вместо массивов символов, то есть строковых констант, при этом допуская NULL?
Поэтому вместо таких строк, как «привет» и «мир», можно ли использовать какой-то синтаксис списка инициализаторов, например &{ 1, 4, 12} или &({ 0, 4, 9 }) или что-то еще? Или строки — это просто особый случай в синтаксисе?
Я посмотрел «Инициализация указателя на массив целых чисел», но это не помогло. Кроме того, этот вопрос был задан 11 лет назад, и, возможно, более поздний стандарт C++ может предоставить такую возможность?
Примечание: изначально этот вопрос был задан как для C, так и для C++, но некоторые комментаторы возражали. Интересные ответы ниже относятся к C++, хотя в комментариях было представлено простое решение на C, поэтому я переключил заголовок и тег на C++.
В если это актуально:
Целочисленные данные предварительно вычисляются и не изменяются.
Для целей поиска каждый указатель на целочисленный массив естественным образом принадлежит определенной позиции индекса массива указателей foo. Это не произвольно.
Для каждого элемента в некотором наборе данных, который пользователь хочет обработать, он будет использовать простую математическую формулу для получения целочисленного числового значения. Таким образом, если они получают (например) 0 из математических вычислений, им нужно просмотреть foo[0], чтобы найти указатель на соответствующий массив (например) 1, 4, 12.
Позиции индекса, содержащие NULL, математически невозможны и никогда не будут доступны.
Каждый массив целых чисел будет того же измерения.
Однако почти 80% указателей будут иметь значение NULL, поэтому двумерный массив будет расточительным.
Размеры будут большими, но не настолько большими, чтобы чтение из файла было единственным разумным вариантом. Скажем, массив из 5000 указателей на массивы из 1000 целых чисел (вместо этого 80% указателей имеют значение NULL). Включаемый файл, объявляющий foo, будет создан автоматически.
В C++ (или даже в C) вы можете объявить: [code]const char *foo[] = { "hello", NULL, "cruel", NULL, NULL, "world", }; [/code] Есть ли способ заставить этот простой и понятный синтаксис инициализации работать с массивами (const) целых чисел вместо массивов символов, то есть строковых констант, при этом допуская NULL? Поэтому вместо таких строк, как «привет» и «мир», можно ли использовать какой-то синтаксис списка инициализаторов, например &{ 1, 4, 12} или &({ 0, 4, 9 }) или что-то еще? Или строки — это просто особый случай в синтаксисе? Я посмотрел «Инициализация указателя на массив целых чисел», но это не помогло. Кроме того, этот вопрос был задан 11 лет назад, и, возможно, более поздний стандарт C++ может предоставить такую возможность? Примечание: изначально этот вопрос был задан как для C, так и для C++, но некоторые комментаторы возражали. Интересные ответы ниже относятся к C++, хотя в комментариях было представлено простое решение на C, поэтому я переключил заголовок и тег на C++.
В если это актуально: [list] [*]Целочисленные данные предварительно вычисляются и не изменяются. [*]Для целей поиска каждый указатель на целочисленный массив естественным образом принадлежит определенной позиции индекса массива указателей foo. Это не произвольно. [*]Для каждого элемента в некотором наборе данных, который пользователь хочет обработать, он будет использовать простую математическую формулу для получения целочисленного числового значения. Таким образом, если они получают (например) 0 из математических вычислений, им нужно просмотреть foo[0], чтобы найти указатель на соответствующий массив (например) 1, 4, 12. [*]Позиции индекса, содержащие NULL, математически невозможны и никогда не будут доступны. [*]Каждый массив целых чисел будет того же измерения. [*]Однако почти 80% указателей будут иметь значение NULL, поэтому двумерный массив будет расточительным. [*] Размеры будут большими, но не настолько большими, чтобы чтение из файла было единственным разумным вариантом. Скажем, массив из 5000 указателей на массивы из 1000 целых чисел (вместо этого 80% указателей имеют значение NULL). Включаемый файл, объявляющий foo, будет создан автоматически. [/list]
Цель создания неопределенного поведения переполнения знакового целого числа — разрешить оптимизацию компилятора. Но разве это не в равной степени веский аргумент в пользу неопределенного поведения переполнения беззнакового целого числа?
Я хочу написать функцию одного аргумента с множественными перегрузками для разных типов целочисленных целого числа. Он хочет иметь возможность назвать его как с типами определяемого реализацией размера (подписанный char, shot, int, long, long), так...
Я хочу написать функцию одного аргумента с множественными перегрузками для разных типов целочисленных целого числа. Он хочет иметь возможность назвать его как с типами определяемого реализацией размера (подписанный char, shot, int, long, long), так...
Я хочу написать функцию одного аргумента с несколькими перегрузками для разных целочисленных типов. Он хочет иметь возможность вызывать его как с типами размера, определяемыми реализацией (подписанный char,shot, int, long, long long), так и с...
Я хотел бы написать проверку clang-tidy, которая находит объявления полей с инициализацией копирования ( ICIS_CopyInit ) и может изменить их на прямую инициализацию списка ( ICIS_ListInit ).
Существует способ найти именно объявления полей с...