Doesn't mean for (constauto& x : v) { /* do something with the value of x */ } this for (auto x : v) { /* do something with the value of x */ } supposing v is an std::vector?
efficiency.
the first one does not make a copy to populate X, it uses the value directly.
the second one copies into X. For large objects, this is a performance killer, same reason you use reference parameters to a function when calling it with a fat object.
^^^
that is a whole new discussion, but the & means that changes (if you left the const off) would change the data IN THE VECTOR. (this is about 50-50 on whether you wanted to do that or not, often you do, and often you don't!).
you need to get comfortable with const keyword and references as you should use both frequently in c++.