3

C++ コードに次のチェックがあります。

if (not obj.someBoolean) {
      // some code
} else {
      // some other code
}   

obj.someBooleanprint ステートメントまたは gdb は、 (bool変数) が であることを確認しますfalse
それでも、演算子 elseを使用している間、制御はブロックに行きます。not

興味深いことに、上記のシナリオ (ブロック !に入る) で使用すると、さまざまな演算子が正しく機能します。if

これは私が使用している方法に問題がありnotますか?

更新(シナリオの詳細):

コード全体を通して、私はnot多くの場所で使用しました。しかし、これはこの問題が (一貫して) 発生する 1 つのシナリオです。

次のコードでも機能します (ifブロックされます)。

bool temp = not obj.someBoolean;
if (temp) {
      // some code
} else {
      // some other code
}     

これは、それが起こっている単一のランダムなポイントに似ています。
なぜこの動作が引き起こされるのか、私は興味がありました。

4

2 に答える 2

2

私は を使用notしておりandorほぼ独占的に C++ で使用しています (対応する sigils よりも読みやすく、エラーが発生しにくいことがわかります)。それらは厳密に同等です。

§2.6 代替トークン [lex.digraph]

1/一部の演算子とパンクチュエータには、代替のトークン表現が提供されています。

2/言語のすべての点で、各代替トークンは、スペルを除いて、それぞれそのプライマリ トークンと同じように動作します。代替トークンのセットは、表 2 で定義されています。

他の場所を見てください。

于 2012-11-07T12:51:42.710 に答える
1

コードの何が問題なのかわかりません。これを試して:

#include <iostream>

int main()
{
  if(not false) std::cout<< "true!"; 
}

「true!」と出力された場合、問題は別の場所にあります。

于 2012-11-07T12:14:44.610 に答える