Составные операторы присваивания с self в Stack Overflow

Чтобы вычислить квадрат 2.0неужели этот код

double a = 2.0;
a *= a;

хорошо определенное поведение? И, что то же самое, со всеми остальными составными операциями присваивания и встроенными типами.

1

Решение

Это законно, потому что (C ++ 11, §1.9 / 15): «Расчет значений
операнды оператора упорядочены перед значением
Вычисление результата оператора «или (C ++ 03, §5 / 4):
«Между предыдущей и следующей последовательностью указать скалярный объект
его сохраненное значение должно быть изменено не более одного раза
оценка выражения. Кроме того, предыдущее значение должно
быть доступным только для определения значения, которое будет сохранено. «(В
a *= a, a на левой стороне доступ только для определения
значение для хранения. И оценка a на
левая сторона — это «вычисление значения», без побочных эффектов.)

2

Другие решения

Да, это.

Единственная причина полагать обратное — это проблема с последовательность точек, но это не относится здесь.

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

Вы изменяете только один раз, вы хороши.

2

По вопросам рекламы [email protected]