Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Meaning of auto& :

Tags:

c++

syntax

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.

like image 345
Chemistpp Avatar asked Oct 16 '13 21:10

Chemistpp


1 Answers

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.

like image 69
dynamic Avatar answered Sep 18 '22 20:09

dynamic