Я читаю «The C++ Programming Language (4-е издание)», и я столкнулся с этим:Разыменование ссылка
template<class C, class Oper>
void for_all(C& c, Oper op) // assume that C is a container of pointers
{
for (auto& x : c)
op(*x); // pass op() a reference to each element pointed to
}
Так от того, что я понимаю, что мы переборе c
и получить ссылку на x
, который является текущей итерацией. x
затем передается оператору вызова функции op
, но он разыменован первым? Почему вы должны были бы разыменовать x
?
См. Комментарий, где говорится, что 'C' является контейнером указателей. По-видимому, 'op()' не хочет указателя, он хочет значение, на которое указывает указатель. Поэтому вы должны косвенно. – Barmar