オブジェクトまたはプリミティブ型を処理するときにC ++操作の優先度が異なる理由++ a * b / b-- --a

Ivan Ehreshi

2つの同じ式が異なる結果をもたらす理由を混乱させましたか?唯一の違いは、式()でカスタムプリミティブラッパータイプを使用していることだけです。

わかりやすくするためにコードを提供しています。structInt{int value;

Int operator*(Int b) const{
    return Int{value*b.value};
}

Int operator/(Int b) const{
    return Int{value/b.value};
}

Int operator-(Int b) const{
    return Int{value - b.value};
}

const Int& operator++() {
    ++value;
    return *this;
}

Int operator--(int) {
    Int copy{value};
    value--;
    return copy;
    }
};

ostream& operator<<(ostream& out, Int x) {
    out << x.value;
}

int main(){
    int a = 11; Int A{11};
    int b = 4; Int B{4};
    cout << ++a / b * b-- - a << endl; // 0
    cout << ++A / B * B-- - A << endl; // 4
}

また、Clangコンパイラは警告-Wunsequencedを表示しますが、プリミティブ型の式に対してのみです。

ポール・エヴァンス

++a / b * b-- - a変数はシーケンスポイントを挟まずに読み書きされるため、のようなすべての式の動作は未定義です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Firebaseにクエリを実行して、プロパティ値がAまたはBのいずれかであるオブジェクトを返す方法は?

分類Dev

Observable<B> をオブジェクト B に変換する

分類Dev

なぜ「a ^ = b ^ = a ^ = b;」なのか 「a ^ = b; b ^ = a; a ^ = b;」とは異なりますか?

分類Dev

list ["a"、 "b"、 "c"]を反復処理すると、エラー「 'type'オブジェクトに属性 '__getitem__'」がありません。

分類Dev

Linqは、IN(A、B、C)に存在するリスト内のオブジェクトを選択します

分類Dev

!(a == b)とa!= bの違い

分類Dev

!(a == b)とa!= bの違い

分類Dev

「a // b」と「int(a / b)」の違い

分類Dev

「a @ = b」と「a = a @b」の同等性

分類Dev

a == a?a:bとa?a:bの違い

分類Dev

floor(a、b)と// bで異なる結果

分類Dev

関数Bの実行コンテキストがそのアクティベーションオブジェクトを関数に渡さない理由スコープチェーンオブジェクトとして、そのAはBの変数にアクセスします

分類Dev

オブジェクトAにオブジェクトBへの参照が含まれている場合、オブジェクトBの属性をオブジェクトA_DTOの属性にMapstructでマップできますか?

分類Dev

PHPでの括弧で囲まれたオブジェクト[{"a": "b"}]と括弧で囲まれていないオブジェクト{"a": "b"}に関する混乱

分類Dev

「C」が「B」からパブリックに継承し、Bが「A」からプライベートに継承する場合、「C」内に「A」のオブジェクトを作成できないのはなぜですか?

分類Dev

[b、a] = [a、b]とconst [b、a] = [a、b]の違いは何ですか

分類Dev

オブジェクトAの参照をオブジェクトBに渡して、BがAの参照を使用してAのフィールドとメソッドに直接アクセスできるようにするのは正しいですか?

分類Dev

フィルタオブジェクトとb、a係数を使用した非常に異なる結果

分類Dev

C ++でのOop:B * b = new B()とA * b = new B()の違いは何ですか

分類Dev

ミューテックスを使用してこのセキュリティを同期する方法:(AまたはB)C(AまたはB)(AまたはB)C

分類Dev

(a + b)?cのNFA

分類Dev

ブール式を単純化する:(a + b)(b '+ c)(a + c)=(a + b)(b' + c)

分類Dev

floor(a /(double)b)* b == a if a%b == 0 in C?

分類Dev

b2EdgeShapeとb2ChainShapeを使用して曲線を作成するのに適したオブジェクトはどれですか?

分類Dev

Java:AがBを拡張し、Bがオブジェクトを拡張する場合、その多重継承は

分類Dev

KotlinのアクティビティAからアクティビティBにオブジェクトのリストを渡す方法は?

分類Dev

オブジェクトAをオブジェクトBに変換するためのより良い設計アプローチは何ですか?

分類Dev

なぜ「b <a?「a <bの代わりにa:b」b:a” maxテンプレートを実装するには?

分類Dev

`let a:&A =&b;`の `b:B`の参照`&b`を `&A`に強制変換する方法は?

Related 関連記事

  1. 1

    Firebaseにクエリを実行して、プロパティ値がAまたはBのいずれかであるオブジェクトを返す方法は?

  2. 2

    Observable<B> をオブジェクト B に変換する

  3. 3

    なぜ「a ^ = b ^ = a ^ = b;」なのか 「a ^ = b; b ^ = a; a ^ = b;」とは異なりますか?

  4. 4

    list ["a"、 "b"、 "c"]を反復処理すると、エラー「 'type'オブジェクトに属性 '__getitem__'」がありません。

  5. 5

    Linqは、IN(A、B、C)に存在するリスト内のオブジェクトを選択します

  6. 6

    !(a == b)とa!= bの違い

  7. 7

    !(a == b)とa!= bの違い

  8. 8

    「a // b」と「int(a / b)」の違い

  9. 9

    「a @ = b」と「a = a @b」の同等性

  10. 10

    a == a?a:bとa?a:bの違い

  11. 11

    floor(a、b)と// bで異なる結果

  12. 12

    関数Bの実行コンテキストがそのアクティベーションオブジェクトを関数に渡さない理由スコープチェーンオブジェクトとして、そのAはBの変数にアクセスします

  13. 13

    オブジェクトAにオブジェクトBへの参照が含まれている場合、オブジェクトBの属性をオブジェクトA_DTOの属性にMapstructでマップできますか?

  14. 14

    PHPでの括弧で囲まれたオブジェクト[{"a": "b"}]と括弧で囲まれていないオブジェクト{"a": "b"}に関する混乱

  15. 15

    「C」が「B」からパブリックに継承し、Bが「A」からプライベートに継承する場合、「C」内に「A」のオブジェクトを作成できないのはなぜですか?

  16. 16

    [b、a] = [a、b]とconst [b、a] = [a、b]の違いは何ですか

  17. 17

    オブジェクトAの参照をオブジェクトBに渡して、BがAの参照を使用してAのフィールドとメソッドに直接アクセスできるようにするのは正しいですか?

  18. 18

    フィルタオブジェクトとb、a係数を使用した非常に異なる結果

  19. 19

    C ++でのOop:B * b = new B()とA * b = new B()の違いは何ですか

  20. 20

    ミューテックスを使用してこのセキュリティを同期する方法:(AまたはB)C(AまたはB)(AまたはB)C

  21. 21

    (a + b)?cのNFA

  22. 22

    ブール式を単純化する:(a + b)(b '+ c)(a + c)=(a + b)(b' + c)

  23. 23

    floor(a /(double)b)* b == a if a%b == 0 in C?

  24. 24

    b2EdgeShapeとb2ChainShapeを使用して曲線を作成するのに適したオブジェクトはどれですか?

  25. 25

    Java:AがBを拡張し、Bがオブジェクトを拡張する場合、その多重継承は

  26. 26

    KotlinのアクティビティAからアクティビティBにオブジェクトのリストを渡す方法は?

  27. 27

    オブジェクトAをオブジェクトBに変換するためのより良い設計アプローチは何ですか?

  28. 28

    なぜ「b <a?「a <bの代わりにa:b」b:a” maxテンプレートを実装するには?

  29. 29

    `let a:&A =&b;`の `b:B`の参照`&b`を `&A`に強制変換する方法は?

ホットタグ

アーカイブ