Приоритет операции приведения в C#

будут ли различия ниже иметь значение значительно В C#?

int a, b;
double result;
result = (double)a / b;
result = a / (double)b;
result = (double)a / (double)b;

какой из них вы используете?

3 ответов


бросание произойдет до разделения.

в ваших примерах не имеет значения, какой из них вы делаете, как если бы один операнд был двойным, среда выполнения также будет бросать / преобразовывать другой в двойной.

Это похоже на микро-оптимизацию - не то, о чем стоит беспокоиться или иметь дело, если измерения не показывают, что это действительно узкое место.


Я делаю так:

result = (double)a / (double)b;

это может быть строго ненужным, но обычно я хочу сделать обязательно что он не будет делать целочисленное деление, и я действительно не хочу помнить конкретные правила для этого сценария, поэтому легче (если еще несколько нажатий клавиш) быть явным.


Я (double)a / b потому что я представляю int как нечто неделимое, как камень или что-то еще. Когда его бросают в двойник, он становится делимым, как пирог. Вы можете разделить 3.0 торты на четыре части, но вы не можете разделить три камня на 4.0 части. Или что-то. В этом есть смысл?