Что, если у меня есть что-то вроде этого:
int a = 20;
int min = INT_MIN;
if(-a - min)
//do something
Предположим, что INT_MIN, если оно положительное, больше, чем INT_MAX. Будет ли min компилятор когда-либо преобразовывать что-то вроде -min как в -INT_MIN, которое может быть неопределенным?
min
имеет неплохую вероятность затененияstd::min
(когда есть операторusing
), поэтому я бы не рекомендовал его использовать. - person Brian Cain   schedule 26.09.2013using namespace std;
, но я не понимаю, как будет вызываться min(), если я не использую круглые скобки. - person user2672807   schedule 26.09.2013min
, он сказал, что ваша переменная затеняет его. Поэтому, если вы попытаетесь вызватьmin
без уточнения, вы не сможете это сделать, потому чтоmin
означаетint
, а не функцию. - person Steve Jessop   schedule 26.09.2013int
— скрытие стандартной функции с помощью функции было бы более рискованным. Лично я считаю, чтоusing namespace std;
хуже, чем скрытие имени, поэтому вопрос о неожиданном сокрытии не должен возникать с самого начала. - person Steve Jessop   schedule 26.09.2013min
не конфликтует сstd::min
в правильно написанном коде; вот почему у нас есть пространства имен. Сдувать их с помощьюusing namespace std;
— мерзость. - person Pete Becker   schedule 26.09.2013using namespace std;
просто неправильно, и лучшая защита от этого - не делать этого. Учитывая выбор не использоватьmin
в качестве имени и не использоватьusing namespace std;
, последнее, очевидно, лучше. Особенно, когда проблема не в том, чтоmin
конфликтует сstd::min
, а в том, что если вы используетеmin
в качестве имени переменной, и вы вызываетеstd::min
без квалификатора, вы получите ошибку. Эту ошибку легко исправить; если вы не можете заставить себя удалитьusing namespace std;
, добавьте квалификатор кmin
там, где он вызывается. - person Pete Becker   schedule 26.09.2013min
из-за популярностиusing namespace std
(или дажеusing std::min
, с которым, я полагаю, у вас не будет такой большой проблемы). Многие из нас сотрудничают с авторством программного кода с другими, которые не так внимательны, и, чтобы избежать возможности ломать голову, давайте просто полностью избежим проблемы. - person Brian Cain   schedule 27.09.2013