2 / 2 / 0
Регистрация: 19.05.2013
Сообщений: 27
|
||||||
1 | ||||||
От каких ошибок страхует Const при перегрузке оператора присваивания29.07.2014, 19:39. Показов 1060. Ответов 19
Метки нет (Все метки)
Здравствуйте. Вопрос имею теоретический.
В классе A перегружается оператор присваивания, объявление выглядит так:
Спасибо.
0
|
29.07.2014, 19:39 | |
Ответы с готовыми решениями:
19
Почему при перегрузке оператора присваивания, возвращаемое значение не константно? Зачем нужен const при перегрузке оператора Альтернатива перегрузке оператора присваивания Избыточное копирование объекта при реализации оператора умножения и оператора присваивания |
2 / 2 / 0
Регистрация: 19.05.2013
Сообщений: 27
|
||||||
29.07.2014, 19:51 [ТС] | 3 | |||||
Там ошибка в коде. Правильно должно быть так:
0
|
57 / 51 / 42
Регистрация: 18.07.2014
Сообщений: 194
|
|
29.07.2014, 19:59 | 4 |
0
|
2 / 2 / 0
Регистрация: 19.05.2013
Сообщений: 27
|
|
29.07.2014, 20:21 [ТС] | 6 |
Vourhey, То есть Вы считаете, что это const - ошибка, и не может быть такой ситуации, где это бы пригодилось?
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||||||
29.07.2014, 20:26 | 7 | |||||
Смотря чего ты добиться хочешь. Есть негласное правило - пользовательский тип должен обеспечивать поведение, как встроенные типы. Например, int. C int я могу сделать:
0
|
2 / 2 / 0
Регистрация: 19.05.2013
Сообщений: 27
|
|
29.07.2014, 20:32 [ТС] | 8 |
А к примеру чего можно хотеть добиться таким образом?
Просто это из лекций computer science center, а они похоже знают, что делают.
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
29.07.2014, 21:25 | 9 |
Поведения как у встроенных типов. Либо некомпилируемого кода в случае из лекций CSC.
А, похоже, что не знают. Докажи обратное.
Добавлено через 18 минут Ну или найди мне на каких-нибудь серьезных ресурсах с const.
0
|
2 / 2 / 0
Регистрация: 19.05.2013
Сообщений: 27
|
|
29.07.2014, 21:38 [ТС] | 10 |
Может быть дельше будет ответ, узнаю - напишу.
0
|
30.07.2014, 18:14 | 11 |
Vourhey, Владимир_1994, это есть у Алена Голуба (правило 124).
Кликните здесь для просмотра всего текста
Наконец, operator=() должен возвращать ссылку на константу
просто потому, что не хотите, чтобы кто-нибудь имел возможность модифицировать возвращенный объект после того, как произошло присваивание. Следующее будет недопустимым в случае возврата ссылки на константу: (x = y) = z; Не по теме: Если можно запретить писать меньше дури - пусть уж лучше так. Хотя тут же набигут толпы "профессионалов", которым эта вещь была не нужна, но после запрета вдруг резко понадобилась.
0
|
30.07.2014, 18:29 | 13 |
Kuzia domovenok, писать i++ + ++i - тоже конченый идиотизм. Давайте так: вы мне будете приводить примеры кода, а я буду определять: просто идиотизм, идиотизм конченый, или есть в идиотизме благая цель.
Ах да: можно же ведь переопределить operator+ так, чтобы было деление. Или #define true false. Вот ведь чёрт, пойду-ка я подправлю код своей либы.
0
|
30.07.2014, 18:38 | 14 |
или оператор =, который действует не аналогично встроенному оператору = и не возвращает ссылку
Добавлено через 2 минуты нет, всего-навсего UB, в отличие от сабжа.
0
|
30.07.2014, 18:42 | 15 |
Kuzia domovenok, то есть если вы встретите код своего коллеги, в котором написано всё перечисленное, не предложите его отправить на 2 года на каторжные работы (программировать на Basic, например), а пожмёте плечами и скажете: ну тут мы делаем как у встроенных типов, тута вообще
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
30.07.2014, 18:57 | 16 |
Да никто так и не пишет. Ясное дело, что данный пример приведен для иллюстрации.
Кстати, а зачем нужно, чтобы объект нельзя было модифицировать после присваивания по возвращенной на него ссылке? Какая проблема решается таким образом? Если к некоему объекту применен оператор присваивания, значит он априори неконстантный, так зачем запрещать его менять по возвращаемой ссылке? PS. Т.к. ты склонен сразу причислять не полностью с тобой согласных либо к "правым", либо к "левым", сразу напишу, что я не тот и не другой. У меня умеренные взгляды. Мне пока что просто интересно послушать твою версию.
0
|
30.07.2014, 19:14 | 17 |
Так как я склонен считать, что в интернетах кто-то неправ, то могу смело заявить: а вот в компании Kuzia domovenok это корпоративный стандарт .
Ещё раз цитирую Голуба: Ну вот хотелка такая у него. Я же полностью согласен с Kuzia domovenok - если кто-то переопределяет стандартный оператор, то пусть обеспечит семантику встроенных типов. Лично я бы писал const просто для того, чтобы посмотреть, сколько дурней напишут (x = y) = z. Такая вот статистика . Хм. Человек на форуме, которого я даже не знаю, уже причислил меня к религиозным фундаменталистам. Обычное дело.
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
30.07.2014, 19:25 | 18 |
Не по теме: Ну ты же причислил меня в соседней векте к любителям писать ОС на интерпретаторе (грубо говоря). А Кузю сам тут же причислил к любителям усложнизмов: Так что мы почти квиты :) А вообще, не принимай близко, я абсолютно без злого умысла это написал. Только ради улучшения взаимопонимания. Ну вот проверить нечто таким образом - это практика хорошая, особенно во время кровавого рефакторинга. Но брать именно за правило, если понимать Голуба буквально, лично я бы не рискнул. Кстати, за довольно большой промежуток времени общения со всяким легаси, подобный код попадался от силы пару раз, поэтому, по крайней мере для своего случая, имею право полагать, что проблема несущественна. Ну, у меня тоже есть своя статистика.
0
|
30.07.2014, 19:33 | 19 |
DrOffset, Голуба я привел просто как пример - у него есть хоть какая-то аргументация (overhead,
2
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
30.07.2014, 19:45 | 20 |
Так уже, выше же. Да и ко мне можно на ты. Не люблю строить лишних барьеров.
Говоря в общем, очень многие из тех советов, которые вроде как бы нацелены на предупреждение Добавлено через 1 минуту За эту здравую мысль поставлю плюс.
1
|
30.07.2014, 19:45 | |
30.07.2014, 19:45 | |
Помогаю со студенческими работами здесь
20
Ошибка при перегрузке оператора + Ошибка при перегрузке оператора >> Ошибка при перегрузке оператора == Ошибка при перегрузке оператора << Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |