据我所知,自动意味着类型扣除。我从来没有看到它用作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();
}
但是我不明白这种语法是如何工作的以及那个&amp;标志正在那里。
答案 0 :(得分:23)
您的示例代码几乎正确。
在C ++ 11中重新定义了自动含义。编译器将推断正在使用的变量的正确类型。
:
的语法是基于的范围。这意味着循环将解析线程向量中的每个元素。
在for中,您需要指定别名auto&
,以避免在thread
变量中创建向量内的元素副本。这样,thread
var上的每个操作都在threads
向量内的元素上完成。此外,在基于范围的for中,出于性能原因,您始终希望使用引用&
。