Да, это безопасно (по крайней мере, в этом случае).Здесь вы используете только два «оператора»: первичное выражение (something)
и двоичное something +/- something
(добавка).
Раздел 1.9 Program execution
(из C ++ 0x N3092):
Операторы могут быть перегруппированы в соответствии с обычными математическими правилами только тогда, когда операторы действительно являются ассоциативными или коммутативными.
В терминах группировки 5.1 Primary expressions
заявляет:
Заключенное в скобки выражение - это первичное выражение, тип и значение которого идентичны выражениям в вложенном выражении.... Заключенное в скобки выражение может использоваться точно в тех же контекстах, в которых может использоваться вложенное выражение, и с тем же значением, если не указано иное.
Я считаю, что использованиеСлово «идентичный» в этой цитате требует соответствующей реализации, чтобы гарантировать, что оно будет выполнено в указанном порядке, если только другой заказ не может дать точных таких же результатов.
А для сложения и вычитания в разделе 5.7 Additive operators
есть:
Аддитивные операторы + и - группа слева направо.
Таким образом, стандарт диктует results. Если компилятор может удостовериться, что одни и те же результаты могут быть получены при различном порядке операций, он может переупорядочить их.Но случится это или нет, вы не сможете заметить разницу.