странный двойной указатель нулевой проверки - PullRequest
1 голос
/ 25 июня 2010

Является ли это действительной нулевой проверкой параметра указателя DOUBLE, переданного в функцию

if (!pdblValue) return E_POINTER;

Ответы [ 4 ]

6 голосов
/ 25 июня 2010

Да, это нормальная проверка на ненулевой указатель.

3 голосов
/ 25 июня 2010

В C ++ оператор if использует логическое выражение.Если это true , он выполняет часть внутри условного блока.Если это false , это не так.

pdblValue имеет указатель типа.Отрицание этого (! PdblValue) даст длинное целочисленное выражение, которое отличается от нуля, если значение указателя было NULL, и ноль в противном случае.

Это будет преобразовано в логическое значение, потому что это то, что нужно всостояние.Отличное от нуля значение будет преобразовано в истинное значение, а нулевое значение - в ложное.

Следовательно, это будет иметь ту же семантику, что и более естественная форма:

if (pdblValue == NULL) ...

В которойвы на самом деле предоставляете логическое выражение - то, которое вы на самом деле имели в виду.

1 голос
/ 25 июня 2010

Да.Указатель оценивается как «да», если он ненулевой, как и любой другой примитивный тип в C ++.

0 голосов
/ 25 июня 2010

Предполагая, что pdblValue является указателем, и он установлен в NULL, когда инициализирован и недействителен, тогда да.

...