It&#x27;s a trade off more than a necessity. For example, Rust doesn&#x27;t have explicit capture lists, and if you want explicit control, you make new bindings and capture those. You almost never need to do this in Rust, so it&#x27;s optimized for that case; I haven&#x27;t written many closures in C++, so I can&#x27;t say as much about the frequency there.<p>To make this more concrete:<p><pre><code>    let s = String::from(&quot;s&quot;);
    
    let closure = || {
        println!(&quot;s is: {}&quot;, s);
    };
    
    closure();
</code></pre>
If you wanted to capture s in a different way:<p><pre><code>    let s = String::from(&quot;s&quot;);
    
    let s1 = &amp;s;
    let closure = || {
        println!(&quot;s1 is: {}&quot;, s1);
    };
    
    closure();
</code></pre>
No capture list needed, same control.