내가 GCC 4.6.3 사용하고 상호 작용 다음 코드와 난수 생성하려고했다 : C++ (11 개) 임의의 숫자와 표준 : : 바인드는 예상치 못한 방법으로
#include <random>
#include <functional>
int main()
{
std::mt19937 rng_engine;
printf("With bind\n");
for(int i = 0; i < 5; ++i) {
std::uniform_real_distribution<double> dist(0.0, 1.0);
auto rng = std::bind(dist, rng_engine);
printf("%g\n", rng());
}
printf("Without bind\n");
for(int i = 0; i < 5; ++i) {
std::uniform_real_distribution<double> dist(0.0, 1.0);
printf("%g\n", dist(rng_engine));
}
return 0;
}
나는 두 가지 방법이 생성하는 예상을 5 개의 난수의 순서. 대신 실제로 얻은 것입니다.
With bind
0.135477
0.135477
0.135477
0.135477
0.135477
Without bind
0.135477
0.835009
0.968868
0.221034
0.308167
GCC 버그입니까? 또는 std :: bind와 관련된 미묘한 문제입니까? 그렇다면 결과에 대해 이해할 수 있습니까?
감사합니다.
공정하지, 난에 대한 +1을 게시하기 전에 엄마로부터 전화가 있었다 속도. – nurettin
젠장, 난 그냥 스마일리로 대답 할 수 없어 :) –
약간 주제 떨어져,하지만 바인딩을 사용하고 각 std :: thread에 대한 참조로 생성기를 전달하려면 어떻게해야합니까? – pyCthon