2017-02-12 4 views
5

У нас есть функции constexpr с C++ 11, и они становятся менее ограниченными, поскольку с каждым новым стандартом (14, 1z).Почему стандартная библиотека C++ не предоставляет конфигурационные версии cmath-функций?

Тем не менее, наиболее очевидные функции в STL, которые могут быть сделаны constexpr, cmath/math.h Функции, до сих пор нет constexpr версии в любой стандартной реализации библиотеки AFAIK.

Это только в отставании стандарта C++, или есть ли какая-либо другая причина, почему у нас до сих пор нет версий этих функций constexpr?

+2

Я не использую здесь тег 'math', по крайней мере, согласно вики-тегу. Я предлагаю вам удалить его. – tambre

+0

Потому что 'cmath' и' math.h' являются заголовками C. Кроме того, для реализации этих функций требуется функция punun, которая не допускается в 'constexpr'. – DeiDei

+0

Почему вы спрашиваете еще раз, когда заметили, что 1-й вариант вашего вопроса плохо летает? Вместо того, чтобы спрашивать о стороннем ресурсе, вы сейчас обсуждаете тему. –

ответ

5

Он еще не был стандартизации. Начальный proposal был представлен только на прошлой неделе, но только охватывал полезность и линейные операции, а не любые трансцендентные функции. Математика сложна, а математика с плавающей запятой сложна. Например, реализации не допускают переполнения до бесконечности в constexpr, но это пока еще не стандартизировано.

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

GCC предлагает постоянную оценку математических функций как несоответствующее расширение.

+0

Что вы подразумеваете под термином «интерпретатор constexpr компилятора должен иметь специальный интерфейс интерфейса математической библиотеки, поскольку он не может видеть его реализацию».? Очевидно, что * существующие функции * math.h/cmath не могут быть сделаны constexpr (поскольку, между прочим, они устанавливают errno), поэтому для реализации версий constexpr потребуется любой другой заголовок. – Danra

+0

@ Danra Помещение математических функций в заголовок и перекомпиляция их каждый раз является не стартером. Постоянная интерпретация требует своей собственной поддельной реализации времени компиляции. До тех пор, пока язык не приобретет особенность для таких вещей (и обсуждается только это), это будет особый случай. – Potatoswatter

+1

Обратите внимание, что 'constexpr' не гарантирует успех компиляции. Константная математика может помочь при переполнении или 'errno', что и делает GCC. – Potatoswatter