Какой смысл получать адрес универсальной / прямой ссылки? - PullRequest
0 голосов
/ 18 сентября 2018

мне встречается следующий код фрагмент :

......
template <typename SrcIt, typename DstIt, typename Func>
auto par_transform_naive(SrcIt first, SrcIt last, DstIt dst, Func&& func) {
    ......
    auto future = std::async([first, dst, start_idx, stop_idx, &func] {
      std::transform(first + start_idx, first + stop_idx, dst + start_idx, func);
    });
    ......
}
......

Что меня смущает, так это то, почему код должен получить адрес func:

......
auto future = std::async([first, dst, start_idx, stop_idx, &func]
......

Насколько я понимаю, независимо от того, func выводится как lvaule refernce или rvalue reference, нет необходимости снова получать адрес.

1 Ответ

0 голосов
/ 18 сентября 2018

&func находится в лямбда-захвате .Это означает, что лямбда будет захватывать func по ссылке.

Без него он захватывает по значению, что означает создание копии объекта, на который делается ссылка.

...