32
4

1 に答える 1

46

キャスト構文です。

その理由は、キャストと単項の加算、減算、および乗算 (逆参照演算子) が、バイナリの対応する演算子よりも優先されるためです。ここの空白は問題ではないため、次のように読むこともできます。

    A a = (A()) +A();

キャストとunary+バイナリよりも優先順位が高いoperator+ため、式は前者の意味を持ちます。

中身が型ではない場合、どのようにキャストできるのか疑問に思われるかもしれません (私もそうでした)。最も厄介なパースを入力してください!+A()、つまり、型のオブジェクトを、引数を0個取り、型のオブジェクトを返す関数にキャストしようとしていますA

レコードの場合、構文は次のとおりです。

    A a = ((A())) + A();

二重括弧はキャストできないため、必要なものが得られ、バイナリoperator+式の解析に戻ります。

これは、加算ではなく除算演算子で問題が発生しない理由も説明しています。単項演算子はありません。

于 2013-05-20T03:53:19.007 に答える