Opened 6 years ago
Closed 6 years ago
#190 closed ожидается проверка (задача сдана)
Домашнее задание №1
Reported by: | Климов Егор | Owned by: | rutsky,grabovoy.philipp |
---|---|---|---|
Priority: | проверка | Milestone: | ha1-milestone2 |
Component: | HA#1 matrices | Version: | 1.0 |
Keywords: | Cc: |
Description
Change History (7)
comment:1 follow-up: 2 Changed 6 years ago by
Milestone: | ha1-milestone1 → ha1-milestone2 |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 6 years ago by
Replying to rutsky:
Замечания:
- Почему вы возвращаете из
add()
иmult()
константнуюMatrix
?
Здравствуйте!
Чтобы избежать возможности использования конструкций типа:
Matrix a, b, c, d; ... a.add(b) = c; a.mult(b) = d; ...
Вдруг кто-нибудь бы хотел использовать сумму/произведение в качестве промежуточного значения и тогда подобные конструкции могли бы что-нибудь поломать, но как-то это похоже на что-то почти невозможное.
comment:3 Changed 6 years ago by
Придумал пример: если бы потом я перегрузил оператор ==, то сложно было бы отследить такую ошибку:
Matrix a, b, c, d; ... if(a.mult(b) = c.mult(d)) { ... }
А в случае const, компилятору это должно не понравиться.
Но в этой задаче даже конструктор копирования не понадобился, поэтому, может, я зря это сделал.
comment:4 Changed 6 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
comment:5 Changed 6 years ago by
Внёс изменения:
- Сделал возвращаемые значения в
add()
иmult()
не константными - Заменил инициализацию в теле конструктора на инициализацию в списке инициализации
- Добавил в умножении временную переменную для суммирования, чтобы лишний раз не обращаться к матрице.
Изменение конструктора и добавление временной переменной сделал на всякий случай после просмотра чужих тикетов, надеюсь так можно делать :)
Просматривая тикеты увидел, что Вы уже кому-то писали про const и привели пример с ссылкой на результат действия, не уверен, что правильно понял пример, но видимо если оставить const, то мы не сможем напрямую создавать ссылки на объекты-результаты действия и придется делать ещё лишнюю работу, чтобы создать копию этого объекта, но уже изменяемую и потом на неё сослаться? Корректно ли делать подобные ссылки?
comment:6 Changed 6 years ago by
Отсутствие const
не должно ничего ломать, т.е. операции вроде a.add(b) = c;
хоть и не осмысленны, но не должны приводить к некорректному поведению или утечкам памяти.
Делая временный объект (результат умножения матриц, prvalue) константным, вы ограничиваете возможности применения этого объекта: его нельзя будет сохранить по неконстантной ссылке (например, если пользователь захочет гарантированно избежать копирования), его нельзя будет использовать в качестве аргумента в move-конструкторах и функциях, принимающих неконстантную rvalue-ссылку.
Замечания:
add()
иmult()
константнуюMatrix
?