dimanche 10 février 2019

safety of std::begin and std::end

In this blog post, Eric Nieble states that:

What is wrong with std::begin and std::end? Surprise! they are not memory safe. Consider what this code does:

extern std::vector<int> get_data();
auto it = std::begin(get_data());
int i = *it; // BOOM

std::begin has two overloads for const and non-const lvalues. Trouble is, rvalues bind to const lvalue references, leading to the dangling iterator it above.

I'm having trouble understanding his point and why it is a dandling reference. Could someone explain ?

Aucun commentaire:

Enregistrer un commentaire