Что делает эта строка?
! ( f = fun() )
Никак не могу понять как работает логичское отрицание и зачем вообще оно нужно.. .
З. Ы. fun - любая функция.
Другие языки программирования и технологии
Помогите с C++
ну если функция возвращает значение, то оно может быть нулем или отличным от нуля. В 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
}
Вот пример:
int fun()
{
return 1;
}
int main(void)
{
int f;
bool b = true;
b = !(f = fun()); // в данном случае будет false. Если б fun() возвращало 0, то было бы true
}
fun(), в зависимости от типа возвращаемого значения может возвращать false для типа bool, 0 - для числовых типов, либо нулевой указатель на любой тип. В C/C++ всё это ложь. А восклицательный знак её отрицает, тем самым превращая высказывание в истину, если функция возвращает ложь и наоборот.
Целиком строчку можно, а не выдранный кусок?
Если что-то типа такого: if(!(f = func())){ ...do somehing ...};
То это аналогично такому:
f = func();
if(!f){ ...do something ...};
Если что-то типа такого: if(!(f = func())){ ...do somehing ...};
То это аналогично такому:
f = func();
if(!f){ ...do something ...};
Если значение fun и, соответственно, f не было равно нулю, результатом выражения будет 0, если было равно - то 1.
А зачем оно нужно, узнаешь, когда оно будет нужно. Это примерно как сказать: зачем нужно слово "не"? ;)
P.S. Хотя Дмитрий Игумнов прав: формально возвращаемые значения будут true и false, котя они фактически просто другие обозначения для 1 и 0, но их тип в C++, в отличие от С, считается булевским, а не целым.
А зачем оно нужно, узнаешь, когда оно будет нужно. Это примерно как сказать: зачем нужно слово "не"? ;)
P.S. Хотя Дмитрий Игумнов прав: формально возвращаемые значения будут true и false, котя они фактически просто другие обозначения для 1 и 0, но их тип в C++, в отличие от С, считается булевским, а не целым.
Похожие вопросы
- Помогите срочно C#
- Люди, помогите скачать C++!!
- помогите с C++
- помогите, пожалуйста, c делфи!
- помогите с C програм не выводит результаты
- Помогите Диск C сам заполняеться вот например выйду и диска памать 6гб опять зайду уже 5.65гб и вотак до 1гб помогите
- помогите массив c#.
- Помогите по C#
- Помогите с C++
- Помогите пожалуйста. C#