汽车与汽车的意义:

时间:2013-10-16 21:31:52

标签: c++ syntax

据我所知,自动意味着类型扣除。我从来没有看到它用作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;标志正在那里。

1 个答案:

答案 0 :(得分:23)

您的示例代码几乎正确。

在C ++ 11中重新定义了自动含义。编译器将推断正在使用的变量的正确类型。

:的语法是基于的范围。这意味着循环将解析线程向量中的每个元素。

在for中,您需要指定别名auto&,以避免在thread变量中创建向量内的元素副本。这样,thread var上的每个操作都在threads向量内的元素上完成。此外,在基于范围的for中,出于性能原因,您始终希望使用引用&