Форум программистов, компьютерный форум CyberForum.ru

нубовопросы - C++

Восстановить пароль Регистрация
 
coolfacejpg
Сообщений: n/a
11.08.2011, 01:26     нубовопросы #1
У меня вопрос, связанный с циклами.
Допустим, нужно суммировать числа от 1 до 10 и в итоге получится 55.
Для это сделаем
C++
1
2
3
4
5
6
{
int sum = 0, val = 1;
while ( val <= 10 )
sum += val;
++val;
}
Теперь вопрос:
Почему нужно делать именно
C++
1
sum += val;
, чтобы присвоить sum cумму val и sum, а не
C++
1
sum = val + sum
?
Всё это я взял из книги Стенли Липпмана "Язык программирования С++. Вводный курс" 4-ое издание.
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.08.2011, 01:30     нубовопросы #2
Цитата Сообщение от coolfacejpg Посмотреть сообщение
Почему нужно делать именно
C++
1
sum += val;
, чтобы присвоить sum cумму val и sum, а не
C++
1
sum = val + sum;
?
такая запись короче и интуитивно понятней
coolfacejpg
Сообщений: n/a
11.08.2011, 01:36     нубовопросы #3
Maxwe11, Спасибо, я уже нашёл. Там на следующей странице уже всё было. Надо мне привыкать читать внимательнее и не задавать глупых вопросов. :3
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
11.08.2011, 01:37     нубовопросы #4
делай как тебе понятнее, sum = val + sum; это для понимания, а вот sum += val; это в сокращенном виде, в обоих случаях ответ один и тот же самый, выбирать тебе как понятнее код писать
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
11.08.2011, 02:03     нубовопросы #5
Цитата Сообщение от coolfacejpg Посмотреть сообщение
{
int sum = 0, val = 1;
while ( val <= 10 )
sum += val;
++val;
}
А код неправильный. Произойдет зацикливание.
Сыроежка
Заблокирован
11.08.2011, 02:10     нубовопросы #6
Цитата Сообщение от coolfacejpg Посмотреть сообщение
У меня вопрос, связанный с циклами.
Допустим, нужно суммировать числа от 1 до 10 и в итоге получится 55.
Для это сделаем
C++
1
2
3
4
5
6
{
int sum = 0, val = 1;
while ( val <= 10 )
sum += val;
++val;
}
Теперь вопрос:
Почему нужно делать именно
C++
1
sum += val;
, чтобы присвоить sum cумму val и sum, а не
C++
1
sum = val + sum
?
Всё это я взял из книги Стенли Липпмана "Язык программирования С++. Вводный курс" 4-ое издание.
Спасибо.
Для встроенных типов С++ никакой разницы нет. Более того компилятор обычно генерирует один и тот же объектный код для обоих выражений.

Но не надо забывать, что в С++ пользователь может создавать свои типы данных и перегружать операторы.
Когда вы используете выражение
C++
1
sum += val;
для определнных вами типов, то вы вызываете один оператор-функциючлен класса sum. operator +=( val );
Когда же вы используете выражение
C++
1
sum = val + sum
, то, фактически, вы вызываете две функции: первая - это функция суммирования, которая может быть членом класса, а может быть не членом класса, второе - вы вызываете функцию оператора присваивания sum.operator = ( /* результат предыдущего суммирования*/ ); То есть для пользовательских типов класса использование первого варианта более эффективно.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.08.2011, 02:56     нубовопросы #7
Цитата Сообщение от Overmind024 Посмотреть сообщение
А код неправильный. Произойдет зацикливание.
С чего бы это? Скомпилировать+запустить пробовали?
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
11.08.2011, 04:11     нубовопросы #8
Цитата Сообщение от easybudda Посмотреть сообщение
С чего бы это? Скомпилировать+запустить пробовали?
Добавлю выравнивание для наглядности
C
1
2
3
4
int sum = 0, val = 1;
while ( val <= 10 )
   sum += val;
++val;
Mr.X
Эксперт С++
 Аватар для Mr.X
2801 / 1577 / 247
Регистрация: 03.05.2010
Сообщений: 3,662
11.08.2011, 07:39     нубовопросы #9
Цитата Сообщение от coolfacejpg Посмотреть сообщение
Теперь вопрос:
Почему нужно делать именно
C++
1
sum += val;
, чтобы присвоить sum cумму val и sum, а не
C++
1
sum = val + sum
По Стандарту поведение этих выражений эквивалентно, за исключением того, что в первом значение sum вычисляется только один раз.
easybudda
11.08.2011, 10:02
  #10

Не по теме:

Цитата Сообщение от Nameless One Посмотреть сообщение
Добавлю выравнивание для наглядности
А, ну да...

mousebc103
0 / 0 / 1
Регистрация: 01.08.2011
Сообщений: 15
11.08.2011, 13:02     нубовопросы #11
C++
1
2
3
4
5
6
7
{
int sum = 0, val = 1;
while ( val <= 10 ){
                    sum += val;
                    ++val;
                    }
 }
Yandex
Объявления
11.08.2011, 13:02     нубовопросы
Ответ Создать тему
Опции темы

Текущее время: 06:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru