! значение в с ++ (в следующем контексте) - PullRequest
2 голосов
/ 09 июня 2011

Я знаю что! = Это когда if (x! = Value) {...}, но что это значит в следующем контексте:

 if (! ReadConsoleInput(
                hStdin,      // input buffer handle
                irInBuf,     // buffer to read into
                128,         // size of read buffer
                &cNumRead) ) // number of records read
            ErrorExit("ReadConsoleInput");

или

if (! SetConsoleMode(hStdin, fdwMode) )
        ErrorExit("SetConsoleMode");

или

 if (! GetConsoleMode(hStdin, &fdwSaveOldMode) )
        ErrorExit("GetConsoleMode");

Ответы [ 3 ]

8 голосов
/ 09 июня 2011

Это оператор «Не»: true (1), если операнд равен нулю, false (0) в противном случае.

3 голосов
/ 09 июня 2011

! - это ЛОГИЧЕСКОЕ НЕ, то есть: if (! boolVar) равно if (true != boolVar), а if (! intVar) равно if (0 == intVar)

Если у вас есть функция foo(), которая возвращает 0 при ошибке,проверка if (! foo()) в основном проверяет, была ли функция выполнена успешно или нет, введите скобки при ошибке.

Конечно, вы должны точно знать политику возвращаемых значений для каждой функции, в ней нет закона или правила.

0 голосов
/ 09 июня 2011

! означает «логическое-не» ... оно инвертирует логическое значение следующего значения (то есть проверяет, что следующее значение является ложным). При необходимости следующее значение будет сначала преобразовано в логическое значение: числовые значения / значения указателя, отличные от 0, равны true, 0 (NULL) - false; классы могут предоставлять оператор преобразования, который будет предоставлять либо bool, либо числовой тип / указатель, преобразуемый в bool. Стандартные компиляторы даже позволяют писать функционально идентичный код:

if (not xyz...)
...