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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kukhtikov
2 / 2 / 0
Регистрация: 16.12.2012
Сообщений: 97
#1

Операция присваивания - C++

07.05.2013, 00:07. Просмотров 409. Ответов 4
Метки нет (Все метки)

Чем отличается операция присваивания "/=" от "=" ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2013, 00:07     Операция присваивания
Посмотрите здесь:

C++ Операторы Присваивания
Оператор присваивания C++
C++ оператор присваивания
оператор присваивания C++
механизм присваивания в С++ C++
Что быстрее, операция присваивания или сравнения? C++
C++ Правильно сделана перегруженная операция присваивания?
Атомарна ли операция присваивания в однопроцессорной машине? C++
операция присваивания C++
C++ Операции присваивания
C++ Операция присваивания (=)
Конструктор копирования и операция присваивания в классе C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
07.05.2013, 00:11     Операция присваивания #2
Это два разных оператора. Второй просто присваивает, а первый делит, потом присваивает:
C++
1
2
double a = 3;
a /= 3; // тоже самое что a = a / 3;
Tulosba
:)
Эксперт С++
4383 / 3226 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.05.2013, 11:46     Операция присваивания #3
Еще есть момент, что при использовании операторов "/=", "+=", "-=" и т.д. операнд вычисляется только 1 раз. На обычных переменных это не заметно, но в таком, например, коде очевидно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int& f( int& v )
{
    v *= 2;
    return v;
}
 
int main() {
 
   int i = 10;
   f(i) = f(i) + 42;
   cout << "i=" << i << endl;
    
   int j = 10;
   f(j) += 42;
   cout << "j=" << j << endl;    
 
   return 0;
}
https://ideone.com/BlrOGq

Поэтому в общем случае:
C++
1
a /= 3; // НЕ тоже самое что a = a / 3;
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
07.05.2013, 16:05     Операция присваивания #4
Tulosba, ну, да, она ведь вызывается дважды) Кстати, вот что вижуалка выдала:
Миниатюры
Операция присваивания  
Tulosba
:)
Эксперт С++
4383 / 3226 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
07.05.2013, 16:30     Операция присваивания #5
BumerangSP, на счет результатов, тут дело в порядке вызовов функций (скорее всего зависит от реализации компилятора).
в ideone сначала вызывается для левой части https://ideone.com/bi1xso
в vs - для правой. Картинку не привожу, но можете сами убедиться.
Yandex
Объявления
07.05.2013, 16:30     Операция присваивания
Ответ Создать тему
Опции темы

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