title: c++11 random engines and distributions interaction and cost
body: <p>I have a bunch of questions about random engines and distributions, their cost and interaction:</p>
  
  <ol>
  <li>Is <code>std::random_device</code> an expensive (heavy constructible) object? Should I only create one for my application if possible?</li>
  <li>Are <code>RandomNumberDistribution</code> objects expensive objects or is it mostly dependent of concrete distribution? It seems to me that for example <code>uniform_int_distribution</code> should be very light object containing distribution range <code>[min, max]</code> and may be (?) some internal state.</li>
  <li><p>How does the interaction between <code>random_device</code>, <code>random_engine</code> and <code>distribution</code> work in code below:</p>
  
  <pre><code>std::random_device rd;
  std::mt19937 gen(rd());
  std::uniform_int_distribution&lt;&gt; distr(1, 10);
  
  auto random_value = distr(gen);
  </code></pre></li>
  </ol>
  
  <p>What happens in last line? Distribution get next value from random engine and then brings it to desired range <code>[0, 10]</code>? Always obviously internal states of some objects should be modified after call: definitely <code>random_device</code>, <code>random_engine</code> but does <code>uniform_int_distribution</code> also have some internal state?</p>