2011-12-14 2 views
-1

код ниже будетне работает («!»), Действующий везде?

вызывает функцию-член объекта Sales_item с именем item1. -C++ Primer четвёртый ЭОД. (Книга)

// 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)) 

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

так, согласно названию, не работает ли оператор «(!!)) Одинаково везде?

+0

Исправьте меня, если я ошибаюсь здесь, но вы говорите, что 'if (! Item1.same_isbn (item2)) {foo(); } 'никогда не выполняет' foo', когда item1 соответствует item2? –

+0

Вы уверены, что 'item1.same_isbn (item2)' возвращает значение boolean (true или false)? Что вы получите, если вы делаете 'cout << item1.same_isbn (item2);' в строке перед оператором 'if'? – Gaurav

+0

Он работает последовательно над каждым операндом, для которого он определен. В случае '! Item1.same_isbn (item2)', что является операндом для оператора '!'? Какой тип? Определяется ли '!' Над этим типом? –

ответ

1

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

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

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

+0

Я возьму это как'! item1.same_isbn (item2) 'вернет true, если' ISBN в item1 и item 2' НЕ равны ... – Vastor

0

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

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

Данное заявление будет вычисляться верно, если item1.same_isbn(item2) равно ложь.

+0

Пока оператор! не определен для возвращаемого типа item1.same_isbn, чтобы сделать что-то еще. – jmucchiello

0

Попробуйте

если

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

+0

уже, все тот же результат как раньше .. – Vastor

+0

@Vastor проверьте это, 'item1.same_isbn (item2)' и убедитесь, что он возвращает. – COD3BOY

+0

Я ставлю это так: 'std :: cout << item1.same_isbn (item2) ' и он возвращает 1, которые указывают как истинные – Vastor

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

  • Нет связанных вопросов^_^