Значение auto &: - программирование
Подтвердить что ты не робот

Значение 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();
}

но я не понимаю, как работает этот синтаксис, и что это делает и что там делает знак.

4b9b3361

Ответ 1

Вы почти правильно используете свой пример кода.

Автосознание было переопределено в С++ 11. Компилятор выберет правильный тип используемой переменной.

Синтаксис с : - это диапазон, основанный на. Это означает, что цикл будет анализировать каждый элемент внутри вектора потоков.

Внутри for вам нужно указать псевдоним auto&, чтобы избежать создания копии элементов внутри вектора внутри переменной thread. Таким образом, все операции, выполняемые в thread var, выполняются над элементом внутри вектора threads. Кроме того, в зависимости от диапазона вы всегда хотите использовать ссылку & по соображениям производительности.