На странице https://en.cppreference.com/w/cpp/numeric/math/fabs упоминается, что std::fabsf
доступен с C++ 11. Однако, когда я использую G ++ 6.3.0 для компиляции даже простейшей программы, использующей std::fabsf
, он говорит, что fabsf
не является членом std
.
#include <cmath>
int main()
{
return (int)std::fabsf(0.0f);
}
Какой из них правильный? Неправильно ли G ++ 6.3.0 не включать его в std
, или на приведенной выше странице он упоминается как часть std
в C++ 11?
И если это неправильный G ++, исправлено ли это в более поздних версиях?
Я предполагаю, что вы использовали флаг компилятора -std = C++ 11 или -std = C++ 0x ...?
C++ 17 - первая стандартная версия, в которой явно упоминается fabsf
.
Только @melpomene -std = C++ 11. Рертель, да.
Похоже, cppreference неверна. Похоже, это было добавлено для C++ 17, поскольку это был добавлен в проект в 2016 г. с названием [numerics] Apply P0175 (C Synopses)
, и мы видим, что p0175r1 действительно добавляет:
float fabsf(float x);
статус libC++ не указывает состояние для p0175r1
, так что это означало бы, что он еще не поддерживает эти изменения. Я не могу найти позицию для предложения в страница состояния libstdC++.
Это очень хорошо исследовано и задокументировано, спасибо.
Не упускайте из виду [c.math] / 4 C++ 11
P0175 - это чисто редакционная статья, не имеющая нормативного воздействия. Также то, что сказал Кубби.
Да, fabsf
и все другие функции -f
/ -l
из math.h
являются частью пространства имен std
через cmath
в C++ 11. Он был добавлен примерно в 2002 году, когда C++ 0x был перебазирован поверх стандартной библиотеки C99, что заставило [c.math]/4
включить эти новые функции.
[c.math]/4
The contents of these headers are the same as the Standard C library headers
<math.h>
and<stdlib.h>
respectively, with the following changes:
(историческая справка: намерение добавить все варианты -f
/ -l
уже было очевидно в C++ 03, см. LWG289)
Однако таблица со списком содержимого cmath игнорировалась до 2016 года, когда p0175r1 исправил все такие таблицы, чтобы привести их в соответствие со стандартом.
p0175r1
Impact on the standard
The change is purely editorial.
Мы говорим, что это ошибка инструментальной цепочки, возникшая в результате надзора редакции?
Какие параметры компилятора вы используете?