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

Сообщение Re: Awaiting Review от 12.02.2019 13:24

Изменено 12.02.2019 13:32 rg45

Re: Awaiting Review
Здравствуйте, malegkin, Вы писали:

M>
M>template <typename F>
M>void repeat(unsigned n, F f) {
M>    while (n--) f();
M>}
M>


В качестве наиболее универсального способа передачи функтора в функцию имеет смысл использовать форвардную ссылку:

template <typename F>
void repeat (usnsigned n, F&& f) {
    while (n--) f();
}


Это не обычная rvalue ссылка, как может показаться на первый взгляд, а так называемая forwarding reference. Она может превратиться как в rvalue ссылку, так и в lvalue, константную, или неконстантную. Тем самым обеспечит автовыведение наиболее подходящего типа ссылки, подобранного в соответствии с типом фактического параметра, и убережет от нежелательного копирования/перемещения, что может быть актуально для "тяжелых" функциональных объектов и лямбд.
Re: Awaiting Review
Здравствуйте, malegkin, Вы писали:

M>
M>template <typename F>
M>void repeat(unsigned n, F f) {
M>    while (n--) f();
M>}
M>


В качестве наиболее универсального способа передачи функтора в функцию имеет смысл использовать форвардную ссылку:

template <typename F>
void repeat (usnsigned n, F&& f) {
    while (n--) f();
}


Это не обычная rvalue ссылка, как может показаться на первый взгляд, а так называемая forwarding reference. Она может превратиться как в rvalue ссылку, так и в lvalue — константную, или неконстантную. Тем самым обеспечит автовыведение наиболее подходящего типа ссылки, подобранного в соответствии с типом фактического параметра, и убережет от нежелательного копирования/перемещения, что может быть актуально для "тяжелых" функциональных объектов и лямбд.