Учитывая, что x
является переменной типа int
с числом 5
в качестве значения, рассмотрим следующий оператор:
int y = !!x;
Вот что, я думаю, происходит: x
неявно приводится к bool
и выполняется первое отрицание, после этого выполняется последнее отрицание, поэтому выполняется приведение и два отрицания.
Мой вопрос заключается не только в том, что приведение к bool (выполнение int y = (bool)x;
вместо int y = !!x
) происходит быстрее, чем при использовании двойного отрицания, поскольку вы сохраняете два отрицания от выполнения.
Я могу ошибаться, потому что я часто вижу двойное отрицание в ядре Linux, но я не понимаю, где моя интуиция ошибается, может быть, вы можете мне помочь.
x
могло быть неявно преобразовано вbool
, но это не происходит в!x
, имеющем типint
, и в!!x
, также имеющем типint
. - person Pascal Cuoq   schedule 07.07.2018