Другие языки программирования и технологии

Помогите с C++

Что делает эта строка?
! ( f = fun() )
Никак не могу понять как работает логичское отрицание и зачем вообще оно нужно.. .
З. Ы. fun - любая функция.
Сергей =))
Сергей =))
281
ну если функция возвращает значение, то оно может быть нулем или отличным от нуля. В f записывается значение, которое возвращает функция. Отрицание инвертирует это значение. Например, если fun() вернуло 0, то! f будет true; И наоборот, если fun() вернуло 1, то! f = false
Вот пример:

int fun()
{
return 1;
}
int main(void)
{
int f;
bool b = true;
b = !(f = fun()); // в данном случае будет false. Если б fun() возвращало 0, то было бы true
}
NS
Nurs Sailaubekov
1 079
Лучший ответ
fun(), в зависимости от типа возвращаемого значения может возвращать false для типа bool, 0 - для числовых типов, либо нулевой указатель на любой тип. В C/C++ всё это ложь. А восклицательный знак её отрицает, тем самым превращая высказывание в истину, если функция возвращает ложь и наоборот.
Целиком строчку можно, а не выдранный кусок?

Если что-то типа такого: if(!(f = func())){ ...do somehing ...};
То это аналогично такому:
f = func();
if(!f){ ...do something ...};
Сергей Баюров
Сергей Баюров
82 727
Если значение fun и, соответственно, f не было равно нулю, результатом выражения будет 0, если было равно - то 1.
А зачем оно нужно, узнаешь, когда оно будет нужно. Это примерно как сказать: зачем нужно слово "не"? ;)
P.S. Хотя Дмитрий Игумнов прав: формально возвращаемые значения будут true и false, котя они фактически просто другие обозначения для 1 и 0, но их тип в C++, в отличие от С, считается булевским, а не целым.
Никита Саяпин
Никита Саяпин
65 758