2011-12-14 7 views
-1

以下のコードは、( "!")演算子はどこでも有効ですか?

はITEM1名前Sales_itemオブジェクトのメンバ関数をコールします。 -C++プライマー第四EDI。item1 is equal to item2のISBN場合はtrueを返しますが、あなたは私が(明らかに)等しく、元の状態に逆の効果を使用しないたくなるいくつかの運動を与える(書籍)

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

ので、私は私に言った何かが予想1からコンパイラがコンパイルされます。この

if (!item1.same_isbn(item2)) 

が、結果ミスのようにそれを置くので、そのコードは有効ですが、どこが期待できないよ何かを処理します。

ですから、タイトルごとにnot( "!")演算子は実際にどこでも同じように動作しますか?

+0

私がここで間違っている場合は私を訂正してください。しかし、あなたは 'if(!item1.same_isbn(item2)){foo(); } 'item1がitem2にマッチすると' foo'を実行しませんか? –

+0

'item1.same_isbn(item2)'がブール値(trueまたはfalse)を返すことは確かですか? 'if'文の前の' cout << item1.same_isbn(item2); 'を実行するとどうなりますか? – Gaurav

+0

定義されているすべてのオペランドに対して一貫して動作します。 '!item1.same_isbn(item2)'の場合、 '! '演算子のオペランドは何ですか?タイプは何ですか?その型で '!'が定義されていますか? –

答えて

1

確認!単項演算子を適用することができ作るにスカラー(数値またはポインター)式に変換します。オペランドはboolに変換され、式がfalseの場合はtrue、真の場合はfalseになります。

数値オペランドの場合、!xx != 0に相当します。ポインタオペランドの場合と同じです(ポインタがNULLポインタの場合も同じです)。

boolへの変換、または任意のタイプの変換がある任意のタイプの式にも適用できますオーバーロードされたoperator !が定義されています。

+0

' item1.sem_isbn(item2) 'は' item1とitem 2'のISBNが等しくなければtrueを返します。 – Vastor

0

この例では:item1.same_isbn(item2)はfalseに等しい場合

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

上記の文は真と評価されます。

+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。'item1.sem_isbn(item2) ' とそれが真であることを示す1を返す – Vastor

関連する問題