2014-03-26 2 views
1

Это глупый вопрос, но я в тупике. Являются ли следующие два оператора C++ идентичными?Оператор присваивания, идентичные заявления

regWages = regPay + overTime; 
regPay + overTime = regWages; 
+1

Если вы сомневаетесь, всегда пытайтесь скомпилировать его в текущем стандартном компиляторе. В качестве эксперимента я попробовал вторую строку (например, не ожидал многого). И компилятор говорит: «выражение не назначается». Это из компилятора C++ 11 на основе CLang ++ 3.1. –

ответ

4

Номер один действителен, другой нет. (Возможно. *)

Вы можете назначить только lvalues ​​, которые являются тавтологически то, что вы можете назначить. Результат арифметического выражения обычно не то, что вы можете назначить.

Проще говоря: a = 1 + 2 в порядке, но 1 + 2 = a нет. Вы можете дать a значение, но вы не можете дать результат добавления целых чисел значение.

Назначение в C++ - это изменение состояния. Он сильно отличается от математической концепции «уравнений». Назначение в C++ больше похоже на определение в математике, но в отличие от математики вы можете переназначить значения для существующих объектов.

*) Перегрузка оператора усложняет изображение.

0

Чтобы решить ваши сомнения, вы должны понимать, OME концепции импорта: Lvalues and Rvalues

В коде regWages = regPay + overTime; это правильно, потому что если переменная regWages является Lvalues, это не является временным объектом, и вы можете сделать = операция.

regPay + overTime = regWages; не соответствует действительности, из-за результата regPay + overTime является Rvalues, только временная переменная, вы не можете сделать = операции.

0

Это забавно, но оба оператора могут быть действительными в зависимости от типа определения объектов.

regWages = regPay + overTime; 
regPay + overTime = regWages; 

Однако семантически они различны, оператор присваивания не является симметричным.

Смежные вопросы