Не оператор в С++ для int?
Странный вопрос, но кто-то показал мне это,
Мне было интересно, можете ли вы использовать это! оператор для int в С++? (это странно для меня).
#include <iostream>
using namespace std;
int main()
{
int a=5, b=4, c=4, d;
d = !( a > b && b <= c) || a > c && !b;
cout << d;
system ("pause");
return 0;
}
Ответы
Ответ 1
Да. Для интегральных типов !
возвращает true
, если операнд равен нулю, а false
в противном случае.
Итак, !b
здесь просто означает b == 0
.
Это частный случай, когда значение преобразуется в значение bool
. !b
можно рассматривать как !((bool)b)
, поэтому вопрос заключается в том, что такое "истинность" b
. В С++ арифметические типы, типы указателей и перечисление могут быть преобразованы в bool
. Когда значение равно 0 или null, результат равен false
, в противном случае это true
(С++ §4.1.2).
Конечно, пользовательские классы могут даже перегружать operator!
или operator
< types могут быть преобразованы в bool > , чтобы позволить !b
для своих классов. Например, std::stream
перегрузил operator!
и operator void*
для проверки failbit, так что идиомы вроде
while (std::cin >> x) { // <-- conversion to bool needed here
...
.
(Но ваш код !( a > b && b <= c) || a > c && !b
является просто загадочным.)
Ответ 2
Первоначально, в C (на котором основан С++) не было логического типа. Вместо этого значение "true" было присвоено любому ненулевому значению, а значение "false" было присвоено всем, что оценивается до нуля. Такое поведение все еще существует в С++. Таким образом, для int x
выражения !x
означают "x
not true", что "x
не отличное от нуля", то есть оно истинно, если x
равно нулю.
Ответ 3
Вы можете, !b
эквивалентно (b == 0)
.
Ответ 4
Тест для int верен для ненулевых значений и false для нулевых значений, поэтому это не справедливо для нулевых значений и false для ненулевых значений.
Ответ 5
Встроенный оператор !
преобразует свой аргумент в bool
. Стандарт указывает, что существует преобразование из любого арифметического типа (int
, char
,.... float
, double
...) в bool. Если исходное значение равно 0, результат равен true
, в противном случае это false