Używam GCC 4.6.3 i próbował generować liczby losowe z następującego kodu:C++ 11 liczb losowych i std :: wiążą współdziałać w nieoczekiwany sposób
#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;
}
spodziewałem obie metody do generowania sekwencja 5 liczb losowych. Zamiast tego, tak właśnie otrzymuję:
With bind
0.135477
0.135477
0.135477
0.135477
0.135477
Without bind
0.135477
0.835009
0.968868
0.221034
0.308167
Czy jest to błąd GCC? Czy jest to jakiś subtelny problem związany ze std :: bind? Jeśli tak, to czy możesz mieć jakiś sens wyniku?
Dzięki.
nie fair, miałem rozmowę z mamą przed wysłaniem +1 dla prędkość. – nurettin
Cholera, nie mogę po prostu odpowiedzieć z uśmiechem :) –
Nieco poza tematem, ale co jeśli chcesz użyć bindowania i przekazać generator przez odniesienie do każdego std :: thread? – pyCthon