Although having read a bunch of posts here, I still often make mistakes in using auto&
reference in for (auto& x : some_container)
. Usually, to avoid constructing temporary copy and speed up for-loop iteration for string types, I use auto&
as a default option.
Could someone please guide me on when and how to correctly use auto&
?
EDIT:
Below may be a bad example. I know we shall avoid vector from the book effective c++. However, this question also asks for general guidelines for using auto& iterating containers
Today, I fall into another error trap of using auto&
#include <vector>
#include <iostream>
using namespace std;
int main() {
int n = 3;
vector<bool> vec(n, false);
for(auto& x : vec) cout << x << " ";
cout << endl;
return 0;
}
The error message is show as below. What does it mean?
vector_bool.cpp:9:15: error: non-const lvalue reference to type '__bit_reference<[2 * ...]>' cannot bind to
a temporary of type '__bit_reference<[2 * ...]>'
for(auto& x : vec) cout << x << " ";
^ ~