Значение auto &:
Я понимаю, что автоматический вывод типа. Я никогда не видел, чтобы он использовался как auto&
, и, кроме того, я не понимаю, что делает :
в этом коротком коде.
#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;
}
Я могу догадаться, что это какой-то синтаксический сахар, который заменяет
for(std::vector<std::thread>::iterator it = threads.begin(); it != threads.end(); it++ ) {
(*it).join();
}
но я не понимаю, как работает этот синтаксис, и что это делает и что там делает знак.
Ответы
Ответ 1
Вы почти правильно используете свой пример кода.
Автосознание было переопределено в С++ 11. Компилятор выберет правильный тип используемой переменной.
Синтаксис с :
- это диапазон, основанный на. Это означает, что цикл будет анализировать каждый элемент внутри вектора потоков.
Внутри for вам нужно указать псевдоним auto&
, чтобы избежать создания копии элементов внутри вектора внутри переменной thread
. Таким образом, все операции, выполняемые в thread
var, выполняются над элементом внутри вектора threads
. Кроме того, в зависимости от диапазона вы всегда хотите использовать ссылку &
по соображениям производительности.