Формирование области имен для стандартного пространства имен

Попытка сохранить +129 в символе приводит к сохранению в нем -127. Когда мы пытаемся сохранить +128 в символе, первое число с отрицательной стороны, т. Е. -128, сохраняется. Это связано с тем, что из 9-битного двоичного кода +128, 010000000 сохраняются только самые 8 бит. Но когда 10000000 хранится, самый левый бит равен 1, и он рассматривается как бит знака. Таким образом, значение числа становится -128, так как оно действительно является бинарным (дополнение 2) от -128. В общем случае, если мы превысим диапазон с положительной стороны, мы оказываемся на отрицательной стороне. И наоборот. Если мы превысим диапазон с отрицательной стороны, мы закончим с положительной стороны.

0
задан Cryptography Man 21 February 2019 в 04:04
поделиться

3 ответа

Правило в C ++ заключается в том, что #include <cmath> помещает объявление abs в пространство имен std и позволяет также помещать объявление abs в глобальное пространство имен. [1112 ]

Другое правило в C ++ состоит в том, что #include <math.h> помещает объявление abs в глобальное пространство имен и позволяет также помещать объявление abs в пространство имен std. [1113 ]

Итак, нет, вы не можете предположить, что #include <cmath> не поместит abs в глобальное пространство имен.

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

0
ответ дан Pete Becker 21 February 2019 в 04:04
поделиться

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

.
0
ответ дан Mikołaj Milej 21 February 2019 в 04:04
поделиться

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

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

0
ответ дан R Sahu 21 February 2019 в 04:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: