Структуры constexpr инициализируются нулем?

Бенно

Рассмотрим следующий пример:

template<int N>
struct foo {
    constexpr foo() : a() {}
    int a[N];
};

int main() {
    foo< (foo<1>{}).a[0] > f;
}

При попытке скомпилировать это clang выводит foo<0>как тип fwhile g++вылетает с внутренней ошибкой компилятора.

Однако гарантировано ли значение- amember of foo<1>равным нулю, или это неопределенное / неопределенное поведение?

глубокий

Значение инициализатора a()- члена инициализируется foo::a(через [class.base.init] / 7, это приводит к [dcl.init] / 11). [dcl.init] / 8 указывает, что инициализация значения для массивов инициализирует значение каждого элемента массива. Для ints (и других основных типов) это приводит к нулевой инициализации.

Это не причем constexpr. Внутренняя ошибка компилятора обычно является ошибкой; это также может означать, что вы превысили некоторые ограничения, определенные реализацией, что, похоже, здесь не так.

Как отмечает Петр С. в комментарии, выражение foo< (foo<1>{}).a[0] >, если предположить foo<1>{}).a[0] == 0, приводит к объявлению массива нулевого размера. Это не разрешено в C ++; так что можно утверждать, что поведение g ++ соответствует требованиям.

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

Неопределенная ссылка для неоптимизированного constexpr, используемого в качестве параметра по умолчанию

может ли статическая переменная constexpr использоваться в качестве аргумента шаблона

Почему инициализация переменной с помощью constexpr оценивается во время выполнения, а не во время компиляции

Есть ли способ избежать входа функции constexpr, используемой в файле заголовка, в глобальную область без дополнительного пространства имен для нее?

Почему, когда я выполняю свой код с помощью constexpr, иногда он оценивается во время компиляции, а иногда во время выполнения?

Как использовать префиксы единиц ускорения в constexpr

Почему вызов функции constexpr с массивом членов не является постоянным выражением?

когда использовать шаблоны без типов или простые аргументы в функциях constexpr

сохранить строку в структуре constexpr

Почему члены данных constexpr не являются неявно статическими?

Выбор индекса constexpr из динамического индекса

Почему метод constexpr может правильно возвращать члены класса, значение которых изменяется во время выполнения?

Ошибка удержания при использовании функции constexpr?

Почему constexpr должен быть статическим?

Как я могу выполнить утверждение во время выполнения в функции constexpr?

Условный constexpr по независимому условию

constexpr проверка строкового литерала: короткий синтаксис, нет возможности выполнения

Функция-член Constexpr в шаблоне класса

Можно ли использовать переменную шаблона constexpr в качестве значения по умолчанию для аргумента формального шаблона

Почему я не могу использовать значение constexpr в функции, но могу сделать то же самое в рамках этого значения?

Функция-член Constexpr

Проблема с ключевым словом constexpr с классами

Лямбда-аргумент constexpr

Обработка фатальных ошибок (или утверждений) в функциях constexpr

Инициализация неконстантной статической строки с помощью constexpr

Как мне сделать функцию подкачки constexpr?

Можно ли сделать дерево constexpr?

Как установить указатель constexpr на физический адрес

Как можно сохранить список строк в контексте constexpr?

Переменная constexpr должна быть инициализирована константным выражением

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    Définition de la valeur par défaut dans le dictionnaire Python si la clé est manquante

  3. 3

    Невозможно отобразить данные модели загрузки Spring в Thymeleaf

  4. 4

    Merging legends in plotly subplot

  5. 5

    Spring Boot Upload Multipart 413 Request Entity Too Large

  6. 6

    Ошибка. Невозможно использовать член экземпляра xxx в инициализаторе свойства.

  7. 7

    Перебирайте несколько столбцов в фрейме данных Panda и находите уникальные значения подсчета

  8. 8

    TypeError: store.getState não é uma função. (Em 'store.getState ()', 'store.getState' é indefinido, como posso resolver esse problema?

  9. 9

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  10. 10

    Ошибка отладчика кода Visual Studio: «Не удалось найти задачу« gcc build active file »

  11. 11

    np.fft.ifft2 делает изображение полностью черным

  12. 12

    Использование виджетов времени / даты Django в настраиваемой форме

  13. 13

    Ошибки компоновщика в GoogleMobileVision при использовании Firebase ML Kit на iOS без кокаподов

  14. 14

    Вызов выполнения .bat в cmd из Java ничего не делает

  15. 15

    Переопределить некоторые стили класса material-ui, но сохранить стили по умолчанию

  16. 16

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

  17. 17

    Как я могу нарисовать заполненный прямоугольник в JFreeChart?

  18. 18

    Сводная таблица из запроса по месяцам в TeraData

  19. 19

    Обновление строк и столбцов с помощью openpyxl из python

  20. 20

    Чтение данных по строкам в Python с использованием openpyxl

  21. 21

    Как создать переменную с использованием класса Color, который включает только выбранные цвета?

популярныйтег

файл