2012-01-16 3 views
0

если a является указателем, существует ли разница между тестированием if (a) и if (a! = NULL)? Какая из них лучше?Что лучше, если (a) или if (a! = NULL)

+5

Это не имеет значения. –

+0

@JamesMcNellis безразлично, чтение baaaaaaad. Мои глаза пропустили 'if a is pointer' –

ответ

3

Нет никакой разницы. Используйте то, что делает ваш код более читаемым для себя и других. Если он получает в многословен, или если контекст ясно, не стесняйтесь пропустить явный NULL:

void * p = std::malloc(n); 
if (!p) throw std::bad_alloc(); 
+0

Как правило, вы должны использовать' new' в C++, но я не могу представить себе лучший пример. – tstenner

+1

@tstenner: Вы случайно написали свой собственный ':: operator new'? Объекты и память - это два отдельных, не связанных понятия в C++. Не путайте одно с другим. –

+1

Вы правы, но люди, которые пишут своих операторов, обычно не спрашивают (пока) о различии между if (a) и if (a! = Null). – tstenner

5

Это то же самое, но второй один делает ваши намерения более ясными.

Если вы используете C++ 11, вы должны использовать nullptr, так как это не позволит int x; if(x==nullptr){...}

0

Ваш компилятор будет выдавать один и тот же код для обоих, но if(a) совершенно нормальный C идиома, и это что ожидают увидеть ваши коллеги-программисты.

+1

Какие программисты-программисты? Существует большая группа программистов на C, которые любят обфускацию, но в C++ обычно это либо 'if (a! = NULL)', либо 'if (a! = 0)'. –

Смежные вопросы