Информация об изменениях

Сообщение Re[5]: Приведение базового класса в конструкторе потомка от 03.09.2019 11:50

Изменено 03.09.2019 12:37 rg45

Re[5]: Приведение базового класса в конструкторе потомка
Здравствуйте, Евгений Музыченко, Вы писали:

R>>Я думаю, тебе полезно будет освежить в памяти рекомендации из этой чудесной книженции:


ЕМ>Я ее как раз недавно перечитывал. Охотно последую этим советам, если кто-нибудь сумеет внятно объяснить, почему 32-разрядный int "безусловно следует" передавать по значению, а 32-разрядную структуру — столь же "безусловно", но по ссылке.


Ну насчет "безусловно" это ты загнул, конечно. Ну ОК, объекты небольших структур с недорогим копированием, типа твоего Base, вполне допустимо передавать по значению. Об этом говорится в рекомендации №25. Однако способом передачи по умолчанию все же является передача по константной ссылке. Генеруемые компилятором конструкторы копирования и копирующие операторы присванивания имеют именно такой вид. Все стандартные шаблонные функции, наподобие push_back, например, принимают параметры по константной ссылке и никого не парит возможная потеря производительности при работе с целыми числами. Ну какой смысл в этом промежуточном копировании в конструкторе Derived, если в итоге копирование пойдет через конструктор копирования Base, который все равно будет работать по константной ссылке на эту промежуточную копию Не лучше ли сразу пробросить ему эту ссылку?

Ну а что насчет других рекомендаций — касающихся неявных преобразований и модификаторов const при параметрах? Тоже не согласен с чем-то?
Re[5]: Приведение базового класса в конструкторе потомка
Здравствуйте, Евгений Музыченко, Вы писали:

R>>Я думаю, тебе полезно будет освежить в памяти рекомендации из этой чудесной книженции:


ЕМ>Я ее как раз недавно перечитывал. Охотно последую этим советам, если кто-нибудь сумеет внятно объяснить, почему 32-разрядный int "безусловно следует" передавать по значению, а 32-разрядную структуру — столь же "безусловно", но по ссылке.


Ну насчет "безусловно" это ты загнул, конечно. Ну ОК, объекты небольших структур с недорогим копированием, типа твоего Base, вполне допустимо передавать по значению. Об этом говорится в рекомендации №25. Однако способом передачи по умолчанию все же является передача по константной ссылке. Генеруемые компилятором конструкторы копирования и копирующие операторы присванивания имеют именно такой вид. Все стандартные шаблонные функции, наподобие push_back, например, принимают параметры по константной ссылке и никого не парит возможная потеря производительности при работе с целыми числами. Ну какой смысл в этом промежуточном копировании в конструкторе Derived, если в итоге копирование пойдет через конструктор копирования Base, который все равно будет работать по константной ссылке на эту промежуточную копию Не лучше ли просто пробросить ему ссылку на оригинал?

Ну а что насчет других рекомендаций — касающихся неявных преобразований и модификаторов const при параметрах? Тоже не согласен с чем-то?