inline vs. constexpr?

С новым стандартом C ++ 11, когда мне следует использовать ключевое слово встроенное вместо constexpr ключевое слово? Предлагает ли ключевое слово constexpr дополнительную оптимизацию по сравнению с inline , или оно просто утверждает, что данные должны быть вычислены во время компиляции?

Почему constexpr ] работать с GCC в некоторых случаях, когда вызов не является постоянным, например, вызов foo (x) для переменной, отличной от constexpr ? Это ошибка GCC или это действительно часть стандарта?

28
задан Nicol Bolas 14 April 2013 в 12:50
поделиться

1 ответ

Цитируя Википедию:

C ++ 0x представит ключевое слово constexpr, которое позволяет пользователю гарантировать, что конструктор функции или объекта является константой времени компиляции.

Помечать функции как встроенные, если они очень короткие. Отметьте функции как constexpr, если результаты требуются во время компиляции. (Параметры шаблона или размеры массива). Я считаю, что функция может быть как при необходимости.

Функция или конструктор с постоянным выражением могут вызываться с параметрами non-constexpr. Как целочисленный литерал constexpr может быть назначен переменной non-constexpr, так и функция constexpr может вызываться с параметрами non-constexpr, а результаты сохраняются в переменных non-constexpr. Ключевое слово допускает возможность постоянства времени компиляции, когда все члены выражения являются constexpr.

Таким образом, GCC не является неправильным в этом.

3
ответ дан 28 November 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: