В этом посте Эрик Ниблер утверждает, что:
Что не так с std :: begin и std :: end? Сюрприз! они не безопасны для памяти. Посмотрите, что делает этот код:
extern std::vector<int> get_data(); auto it = std::begin(get_data()); int i = *it; // BOOM
std :: begin имеет две перегрузки для константных и неконстантных l-значений. Проблема в том, что rvalues связываются с константными lvalue ссылками, что приводит к висячему итератору, описанному выше.
У меня проблемы с пониманием его точки зрения и почему it
свисающая ссылка. Может кто-нибудь объяснить?