Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 21.12.2013
Сообщений: 49
1

Почему при перегрузке оператора присваивания, возвращаемое значение не константно?

14.12.2016, 22:59. Показов 1122. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Почему при перегрузке оператора присваивания, возвращаемое значение - someClass & operator=(const someClass& rhl), а не const someClass & operator=(const someClass& rhl)? В чем разница?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2016, 22:59
Ответы с готовыми решениями:

От каких ошибок страхует Const при перегрузке оператора присваивания
Здравствуйте. Вопрос имею теоретический. В классе A перегружается оператор присваивания,...

Уточняющий вопрос: почему при перегрузке оператора [] необходимо возвращать ссылку?
Сабж. Ну, то есть есть класс, что-то такое: #include <iostream> using namespace std; class...

Избыточное копирование объекта при реализации оператора умножения и оператора присваивания
Есть класс работы с матрицами. Есть операция умножения матриц, описанная как оператор класса. В...

Предупреждение при перегрузке оператора
Есть вот такой код для созданный для обучения #include <iostream> using namespace std; ...

7
18901 / 9859 / 2410
Регистрация: 30.01.2014
Сообщений: 17,302
15.12.2016, 02:41 2
Лучший ответ Сообщение было отмечено Svyatosl@v как решение

Решение

Svyatosl@v, для того, чтобы сохранить семантику встроенного оператора присваивания (сохранять привычную семантику - это хорошо).
В частности, чтобы иметь возможность писать так:
C++
1
a = b = c;
Если возвращаемое значение будет const, то выражения, подобные этому, станут невозможны.
С другой стороны, можно делать другие типы возвращаемого значения, если на то есть реальные, обоснованные причины. В противном случае нужно сохранять семантику по умолчанию.
2
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
15.12.2016, 02:59 3
Цитата Сообщение от DrOffset Посмотреть сообщение
Если возвращаемое значение будет const, то выражения, подобные этому, станут невозможны.
Почему?
1
18901 / 9859 / 2410
Регистрация: 30.01.2014
Сообщений: 17,302
15.12.2016, 03:02 4
Цитата Сообщение от nd2 Посмотреть сообщение
Почему?
Потому что присваивание - это изменение состояния объекта. В общем случае у константного объекта нельзя изменить состояние. Нет, ну мы конечно можем перегрузить константный оператор присваивания, который меняет состояние mutable полям, но что это в итоге получится? (можно на вопрос не отвечать, задай его себе).
0
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
15.12.2016, 03:05 5
Цитата Сообщение от DrOffset Посмотреть сообщение
В общем случае у константного объекта нельзя изменить состояние.
А где здесь изменение возвращаемого объекта? Передаётся, по цепочке, справа налево, в параметр следующего оператора присваивания.
0
18901 / 9859 / 2410
Регистрация: 30.01.2014
Сообщений: 17,302
15.12.2016, 03:07 6
Да, возможно вопрос родился из-за несовсем корректного примера; Добавь скобки к первому выражению, и станет понятно о чем я говорю:
C++
1
(a = b) = c;
1
nd2
3437 / 2816 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
15.12.2016, 03:14 7
Цитата Сообщение от DrOffset Посмотреть сообщение
Добавь скобки к первому выражению,
Насчёт такого примера, я бы этот вопрос не задавал:
Цитата Сообщение от nd2 Посмотреть сообщение
Почему?
0
18901 / 9859 / 2410
Регистрация: 30.01.2014
Сообщений: 17,302
15.12.2016, 03:16 8
Цитата Сообщение от nd2 Посмотреть сообщение
Насчёт такого примера, я бы этот вопрос не задавал
Это очень хорошо.
0
15.12.2016, 03:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2016, 03:16
Помогаю со студенческими работами здесь

Ошибка при перегрузке оператора >>
Приветствую. Есть 2 класса: enum Color { white = 1, red, green, blue, yellow }; class Shape {...

Ошибки при перегрузке оператора <<
dc.cpp не видит private поля из dc.h dc.h #pragma once #include &lt;cmath&gt; class dc {

Ошибка при перегрузке оператора +
Имеется класс, который представляет из себя строку и количество символов в ней. Задача -...

Ошибка при перегрузке оператора cin >>
#include &lt;iostream&gt; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru