«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Можно ли инициализировать статический член Constexpr с помощью функции Constexpr в C++?

Можно ли инициализировать статический член Constexpr с помощью функции Constexpr в C++?

Опубликовано 22 декабря 2024 г.
Просматривать:239

Can a Static Constexpr Member Be Initialized Using a Constexpr Function in C  ?

Инициализация статического элемента Constexpr с использованием статической функции

Исходный вопрос:

В C , Можно ли вычислить значение constexpr (константу времени компиляции) из функции constexpr и сохранить его как статический член class?

Первые попытки и ответ компилятора:

Первая попытка определить статическую функцию constexpr foo внутри класса и инициализировать статическую панель-член constexpr с использованием foo не удалась с ошибками как в г-4.5.3, так и в г -4.6.3.

Объяснение:

Согласно стандарту C, статический элемент данных constexpr может быть инициализирован в определении класса с использованием фигурных скобок или равенства -initializer, где каждое предложение инициализатора должно быть постоянным выражением. Предоставленный код нарушил это правило, поскольку инициализация bar основывалась на константном выражении foo(sizeof(int)) внутри тела класса, что делало его не постоянным выражением.

Дальнейший анализ:

Дальнейшие попытки, включая перемещение определения функции constexpr за пределы тела класса, по-прежнему приводили к ошибкам в g -4.6.3, подчеркивая особенности компилятора. ограничения.

Вывод:

Согласно стандарту C, инициализация статического элемента данных constexpr с помощью инициализатора, включающего вызов функции constexpr, не допускается за пределами определения функция constexpr или конструктор constexpr. Это связано с требованием, чтобы переменные constexpr были доступны как константы времени компиляции в телах функций-членов.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3