Простой операторский вопрос.+ = - PullRequest
2 голосов
/ 25 сентября 2010

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

num += i;

По сути, это то же самое, что и

num = num + i 

право?

Если вам нужно больше деталей, пожалуйста, скажите мне! Я с нетерпением жду ваших ответов в ближайшее время.

Ответы [ 4 ]

11 голосов
/ 25 сентября 2010

Из ISO C ++ 03 (раздел 5.17 / 7)

The behavior of an expression of the form E1 op= E2 is equivalent to E1 = E1 op E2 except that E1 is evaluated only once.

3 голосов
/ 25 сентября 2010

По сути, да, но это более эффективно. Для базовых типов, таких как целые числа, использование num += i увеличивает значение num напрямую, тогда как num = num + i создает временное значение num, увеличивает его, а затем присваивает его обратно num.

3 голосов
/ 25 сентября 2010

Да. Это точно так же (если вы говорите о встроенном +=). Фактически, именно так += определяется в спецификации языка.

Разве ваша любимая книга по С ++ не охватывает эту тему?

0 голосов
/ 25 сентября 2010

То, что там действительно произойдет, как было сказано ранее, зависит от языка.Если кто-то предполагает C ++, и что num является целым числом, то, как и другие опубликовали, и, как у вас есть

num += i;

эквивалентно

num = num + i;

Но это действительно до классаопределить это поведение в c ++ / c #.По сути, вы вызовете оператор "+ =" для объекта num для типа объекта i.В хорошем дизайне это должно быть то же самое, что сначала выполнить оператор «+», а затем выполнить оператор = описанным выше способом.Но это не обязательно должно быть:

 class foo
 {
     bool operator += (int i) {return false;}
 }

 foo num;
 int i;

 bool result = num += i;

В этом примере num не изменится, а результат будет ложным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...