0

一時的に整数に変換される (丸められる) double に mod 演算子を実装しようとしていますが、コンパイラ (clang) はそれを好まないようで、エラーを返します: assignment to cast is illegal, lvalue casts are not supported. たとえば、このスニペットでは

double a;
int b;
(int)a %= b;

この制限を回避する方法はありますか?

4

1 に答える 1

2

あなたのしていることは違法です。このように整数に(int)a = ...キャストできないため、言うことは違法です。a割り当ての右側にキャストする必要があります。

本当にやりたいのなら、次のように言えます。

double a;
int b;
a = (double)((int)a % b); /* Casting to a double at this point is useless, but because a is a double-type, the result of the modulus it will be implicitly casted to a double if you leave out the explicit cast. */

モジュラスの結果を新しい int 変数に割り当てることをお勧めしますが、それはあなたの選択です。


編集:これはこれの例です:http://ideone.com/tidngT

また、double を int にキャストしても丸められず、単に切り捨てられることに注意してください。また、 double の値が an の範囲よりも大きい場合、int未定義の動作が発生する可能性があります。

于 2016-11-22T05:50:38.923 に答える