I understand that auto means type deduction. I've never seen it used as auto&
and furthermore I don't understand what :
is doing in this short code.
#include <iostream>
#include <vector>
#include <thread>
void PrintMe() {
std::cout << "Hello from thread: " << std::this_thread::get_id() << std::endl;
}
int main() {
std::vector<std::thread> threads;
for(unsigned int i = 0; i < 5; i++) {
threads.push_back(std::thread(PrintMe));
}
for(auto& thread : threads) {
thread.join();
}
return 0;
}
I can guess this is some sort of syntatic sugar that replaces
for(std::vector<std::thread>::iterator it = threads.begin(); it != threads.end(); it++ ) {
(*it).join();
}
but I don't understand how this syntax works and what that & sign is doing there.
You are almost correct with your sample code.
Auto meaning was redefined in C++11. The compiler will inferer the right type of the variable that is being used.
The syntax with :
it's a range based for. It means that loop will parse each element inside threads vector.
Inside the for, you need to specify the alias auto&
in order to avoid creating a copy of the elements inside the vector within the thread
variable. In this way every operation done on the thread
var is done on the element inside the threads
vector. Moreover, in a range-based for, you always want to use a reference &
for performance reasons.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With