С новым стандартом C ++ 11, когда мне следует использовать ключевое слово встроенное
вместо constexpr
ключевое слово? Предлагает ли ключевое слово constexpr
дополнительную оптимизацию по сравнению с inline
, или оно просто утверждает, что данные должны быть вычислены во время компиляции?
Почему constexpr
] работать с GCC в некоторых случаях, когда вызов не является постоянным, например, вызов foo (x)
для переменной, отличной от constexpr
? Это ошибка GCC или это действительно часть стандарта?
Цитируя Википедию:
C ++ 0x представит ключевое слово constexpr, которое позволяет пользователю гарантировать, что конструктор функции или объекта является константой времени компиляции.
Помечать функции как встроенные, если они очень короткие. Отметьте функции как constexpr, если результаты требуются во время компиляции. (Параметры шаблона или размеры массива). Я считаю, что функция может быть как при необходимости.
Функция или конструктор с постоянным выражением могут вызываться с параметрами non-constexpr. Как целочисленный литерал constexpr может быть назначен переменной non-constexpr, так и функция constexpr может вызываться с параметрами non-constexpr, а результаты сохраняются в переменных non-constexpr. Ключевое слово допускает возможность постоянства времени компиляции, когда все члены выражения являются constexpr.
Таким образом, GCC не является неправильным в этом.