Я пытаюсь реализовать оператор mod на двойное число, которое временно преобразуется в целое число (округлено), но компилятор (clang), похоже, не так и возвращает ошибку: assignment to cast is illegal, lvalue casts are not supported
,
Например, в этом фрагменте
double a;
int b;
(int)a %= b;
Есть ли способ обойти это ограничение?
То, что вы делаете, незаконно. поговорка (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
Кроме того, стоит отметить, что приведение двойного числа к целому не округляет его, а просто усекает его. И, если значение вашего двойника выше, чем диапазон int
тогда это может привести к неопределенному поведению.
Других решений пока нет …