and, && (C++)
カテゴリ
構文
説明
and 演算子は、&& 演算子(バイナリ AND または論理 AND)の代替表現です。
両方のオペランドの値が true の場合、結果の値は true になります。 そうでない場合、結果の値は false になります。 両方のオペランドは、暗黙的に論理型に変換され、結果の型は論理型になります。
&(ビット AND)演算子と異なり、&& 演算子は必ずオペランドを左から右に評価します。 左オペランドの評価が 0(または false)の場合、右オペランドは評価されません。
and および && 演算子では処理が省略されます(つまり、最初のオペランドの評価が false の場合、2 番目のオペランドを評価しない)。 したがって、以下の例のような NULL ポインタの検査は有効で安全です。
and 演算子を使用するには、[新しい演算子名を有効にする]オプション(-Vn コンパイラ スイッチまたは[プロジェクト|オプション...]ダイアログ ボックスの[互換性]ページ)を[True]にする必要があります。
and の例
bool test( int * p ) {
return (p != 0) and (*p > 5);
}
and を && に置き換えても有効です。
&& または and をオーバーロードする
&& 演算子、および代替表現の and はオーバーロードできます。 演算子をオーバーロードした場合は、処理が短絡評価されないので、空のポインタの検査は安全ではないことに注意してください。 and をオーバーロードする例を以下に示します。
struct example { bool operator and ( const example & ) {return true;}// same as operator &&}
右辺値参照に && を使用する
新しい C++11 標準の一部として、C++Builder は右辺値参照をサポートするようになりました。 右辺値参照は、以下のように宣言の型の後に &&(and ではなく)を記述することによって指定します:
Apt a;
Apt&& a_ref1 = a;
使い慣れた左辺値参照と新しい右辺値参照の重要な違いは、右辺値参照は一時変数(つまり、右辺値)にバインドでき、左辺値参照(少なくとも const ではない)は右辺値にバインドできないことです。