Формирование области имен для стандартного пространства имен - PullRequest
0 голосов
/ 21 февраля 2019

У меня был быстрый вопрос.Есть ли способ заставить стандартное пространство имен иметь квалификатор std:: scope?Что-то вроде abs, а что нет;у всех std функций должна быть определена область действия.

Я не using namespace std нигде, ни я using std::abs или что-то в этом роде.Может быть важно сказать, что я включил Windows.h, что, я думаю, может быть из-за того, что происходят некоторые из этих функций с незаданной областью.

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Вызов abs вместо std::abs Вы просто используете abs из C

0 голосов
/ 21 февраля 2019

Правило в 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 ++, что создает логистический кошмар.

0 голосов
/ 21 февраля 2019

Стандарт не запрещает другим пространствам имен иметь функции с именем abs только потому, что в пространстве имен std есть функции с именем abs.Это верно для всех других функций, определенных в пространстве имен std.

Если вы хотите быть уверены, что используете std::abs.а не любая другая версия abs, тогда непременно используйте std::abs.Тогда несущественно, есть ли другие версии abs, определенные в заголовочном файле windows.h.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...