Рассмотрим приведенный ниже код:
for (T &t : some_vector_) {
futures.push_back(thread_pool.submit([&t] { t.do_something(); }));
}
На некоторой итерации i, t инициализируется ссылкой на элемент вектора, а затем t передается по ссылке на замыкание. На следующей итерации i + 1 t повторно инициализируется новым значением.
Будет ли t в замыкании из итерации i перезаписано в итерации i + 1? Является ли приведенный выше код неправильным?
Обновление: Я написал программу ниже, чтобы проверить это:
#include
#include
#include
int main(int argc, char *argv[]) {
std::vector some_vector = {0, 1, 2, 3, 4, 5};
std::vector lambdas;
for (int &t : some_vector) {
lambdas.push_back([&t] { std::cout
Подробнее здесь: https://stackoverflow.com/questions/798 ... -a-closure