следующая программа даст какое-то странное поведение компиляции/времени выполнения при компиляции с Visual Studio 2013:Visual Studio 2013 станд :: нить
#include "stdafx.h"
#include <thread>
#include <chrono>
#include <iostream>
int main()
{
{//works
std::thread([](){
std::cout << " thread running1\n";
});
}
{//compile but synstax error exist
auto func = [](){
std::cout << " thread running2\n";
};
std::thread(fun); //fun is not defined
}
{//compile, see next block for mystery compile error
auto func = [](){
std::cout << " thread running2\n";
};
std::thread tmp(func);
}
{//does not compile and don't know why
auto func = [](){
std::cout << " thread running2\n";
};
std::thread(func); //error C2371: 'func' : redefinition; different basic types
}
return 0;
}
Когда эта программа работы, там может произойти сбой, как есть состояние гонки между нить. Основной поток может заканчиваться перед другими потоками.
Кто-нибудь знает, почему второй блок и последний блок не работают?
Где синтаксис изменился в C++? Я понял, что std :: thread (func); создаст неназванный объект, передающий func конструктору. Ps моя программа работает сейчас :-) – Johan
@Johan Это всегда было так. См. [Этот ответ] (http://stackoverflow.com/a/6342009/241631); вы можете добавить еще больше пар круглых скобок, если хотите :) – Praetorian