5

違いはありますか

if ( a or b or c ) {

...と...

if ( a || b || c ) {

...さらに一般的には、優先順位の観点からも、2つの演算子間で?

4

4 に答える 4

6

多くのベテラン プログラマーが「あれ、誰かが突然 Pascal を書き始めたの?」と思わせる文体的な感覚を除けば、機能的な違いはありません。

これらの代替名の目的は、スウェーデンやドイツなどに住む人々が ASCII の標準ローカル バリアントを使用できるようにすること|です ö

Unicode と拡張 ASCII が導入されて以来、この必要性はほとんどなくなりました。なぜなら、国有化された文字セットは、国別の「特殊」文字を生成するためにあまり一般的に使用されていない文字を「盗む」必要がないからです。

于 2013-02-22T11:21:22.663 に答える
2

編集済みをオーバーロードできoperator orます。

それらは同じです。

C および C++ の演算子を参照してください。

型をオーバーロードする場合、コンパイラがそれらを同じ関数と見なすため、同じ型をoperator orオーバーロードすることはできません。operator||

このエラーは、次のコードから発生します。

> prog.cpp: In function ‘bool operator||(Type, Type)’:
> prog.cpp:8:6: error: redefinition of ‘bool operator||(Type, Type)’
> prog.cpp:4:6: error: ‘bool operator||(Type, Type)’ previously defined here

ideaoneについて:

class Type {}
};

bool operator or(Type lhs, Type rhs) {
    return true;
}

bool operator ||(Type lhs, Type rhs) {
    return false;
}

int main() {
    Type a;
    Type b;
    a or b;
    a || b;
}
于 2013-02-22T11:21:15.913 に答える
1

他の回答で述べたように、2つは同じであり、したがって交換可能であることが意図されています。ただし、大きな違いが1つあります。MSVC、C ++ Builder、およびその他のコンパイラorも、特別なヘッダーを含めないとサポートしません。そのorため、携帯性の障害が発生します。

于 2013-02-22T12:42:30.977 に答える
1

ISO14882:2011(e) 2.6-2 (表 2)orによると、 の代替トークンで||あり、まったく同じ意味を持ちます。

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

多くの場合、コンパイラはそれらを#define or ||または内部の同等物として実装します。

andbitorxorcomplbitandand_eq、、およびについてor_eqも同様です。xor_eqnotnot_eq

于 2013-02-22T11:21:21.507 に答える