не ("!") оператор действует везде? - PullRequest
0 голосов
/ 14 декабря 2011

код ниже будет

вызывает функцию-член объекта Sales_item с именем item1. -C ++ Учебник для начинающих 4-е изд. (Книга)

// first check that item1 and item2 represent the same book
if (item1.same_isbn(item2))

, который вернет истину, если ISBN равен item1 is equal to item2, но вы даете какое-то упражнение, которое заставляет меня хотеть использовать эффект, противоположный исходному условию, не равный (очевидно), поэтому я выражаю это так

if (!item1.same_isbn(item2))

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

Итак, согласно названию, оператор not ("!") Фактически везде работает одинаково?

Ответы [ 3 ]

1 голос
/ 14 декабря 2011

Унарный оператор ! может применяться к любому скалярному (числовому или указательному) выражению. Операнд преобразуется в bool, и результат равен true, если выражение равно false, и false, если оно равно true.

Для числового операнда !x эквивалентно x != 0. То же самое для операнда указателя (это верно, если указатель является нулевым указателем.)

Это также может быть применено к выражению любого типа, для которого есть преобразование в bool, или, конечно, для любого типа, для которого определена перегруженная operator !.

0 голосов
/ 14 декабря 2011

Попробуйте

if (! (Item1.same_isbn (item2)))

Примечание: убедитесь, что item1.same_isbn(item2) возвращает true или false

0 голосов
/ 14 декабря 2011

в этом примере:

if (!item1.same_isbn(item2))
{
    //execute this branch if item1.same_isbn(item2) == false
}
else
{
    //execute this branch if item1.same_isbn(item2) == true
}

Приведенное выше утверждение будет иметь значение true, если item1.same_isbn(item2) равно false.

...