C++ не оператор присваивания, или заявление вызова процедуры. Он определяет назначение как оператор в выражении, с боковыми эффектами , и имеет оператор выражения. Ожидается, что оператор верхнего уровня в операторе выражения имеет сторону эффектов —, что он либо модифицирует состояние, как оператор присваивания, , либо вызывает функцию. Но язык этого не требует, и выражения выражения выражения без каких-либо побочных эффектов.
Хороший компилятор будет выдавать предупреждение в таких случаях, так как это почти , конечно, ошибка программиста (и вы можете обычно заткнуться предупреждением путем явно заливкой результатов void
, если по какой-то причине вы хотите таких заявление — макрос assert
часто делает это).
'-x;' отрицает x и отбрасывает результат. как, например, 'x + 1;' – Anycorn
Обратите внимание, что в этом случае компилятор, скорее всего, оптимизирует все выражение, так как оно не имеет никакого эффекта. Собственно, я ожидал бы, что любой достойный компилятор предупредит вас о неиспользованности такого заявления. – ereOn
Да, когда я даю -Wall, я получаю предупреждение: «заявление не действует» – Sanish