Правило в C ++ состоит в том, что #include <cmath>
помещает объявление abs
в пространство имен std
и позволяет также помещать объявление abs
в глобальное пространство имен.
Другое правило в C ++ состоит в том, что #include <math.h>
помещает объявление abs
в глобальное пространство имен и позволяет также помещать объявление abs
в пространство имен std
.
Итак, нет, вы не можете предполагать, что #include <cmath>
не поместит abs
в глобальное пространство имен.
Причина этого правила вместо "очевидного", которое #include <cmath>
помещает имена только в std
, так как последнее правило может быть неприятным для реализации, если разработчики C ++ также не имеют контроля над заголовками C.В этом случае заголовки C ++ должны иметь повторяющиеся объявления для всех функций C, а любое изменение заголовков C должно переноситься в заголовки C ++, что создает логистический кошмар.