Prevent undesired conversion in constructor
<p>According to <a href="http://en.cppreference.com/w/cpp/language/explicit">here</a>, <code>explicit</code>:</p>

<blockquote>
  <p>Specifies constructors and conversion operators (since C++11) that
  don't allow implicit conversions or copy-initialization.</p>
</blockquote>

<p>Thus, are these two techniques identical?</p>

<pre><code>struct Z {
        // ...
        Z(long long);     // can initialize with a long long
        Z(long) = delete; // but not anything smaller
};

struct Z {
        // ...
        explicit Z(long long);     // can initialize ONLY with a long long
};
</code></pre>