0
help!!!!
int main(){ string names[4]={"ddd","fff","bbb","xxx"}; //does not work for( string&& i :names){ cout <<i <<endl; } //does not work for(const auto&& i :names){ cout <<i <<endl; } //it works i meant auto&& and string&& are same thing here ,don't they?the damn part is what is wrong with const auto&& for( auto&& i :names){ cout <<i <<endl; } }
4 Answers
+ 4
so...? what is your question?
+ 3
No, string&& and auto&& are not the same thing.
string&& is trying to declare a rvalue reference as a lvalue.
With auto&& auto will decide the type, this is really the same as const auto&
This may help.
http://stackoverflow.com/questions/5481539/what-does-t-double-ampersand-mean-in-c11
valid signatures are:
for (string i: names)
for (string& i: names)
and:
int main(){
string names[4]={"ddd","fff","bbb","xxx"};
for(const string& i :names){
cout <<i <<endl;
}
for(const auto& i :names){
cout <<i <<endl;
}
for( auto&& i :names){
cout <<i <<endl;
}
return 0;
}
+ 2
The question is why auto&& works but string&& ,const auto&& dont?
0
ok thank you guys but the point I get from all your answer is const can change lvalue reference to accept rvalue,
the new question is, how this work? a quick description will be very useful