Files
hustoj/web/cppreference-zh/chmhelp/cpp-language-converting_constructor.html
2025-08-01 12:57:54 +08:00

65 lines
8.0 KiB
HTML

<!DOCTYPE html>
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>&#36716;&#25442;&#26500;&#36896;&#20989;&#25968;</title>
<link rel="stylesheet" href="ext.css" />
<link rel="stylesheet" href="site_modules.css" />
</head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_language_converting_constructor skin-cppreference2 action-view cpp-navbar">
<div id="cpp-content-base">
<div id="content"><a id="top"></a>
<h1 id="firstHeading" class="firstHeading">&#36716;&#25442;&#26500;&#36896;&#20989;&#25968;</h1>
<div id="bodyContent">
<div id="contentSub"><span class="subpages">&lt; <a href="cpp.html">cpp</a>&lrm; | <a href="cpp-language.html">language</a></span></div>
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
<p>&#19981;&#20197;&#35828;&#26126;&#31526; <a href="cpp-language-explicit.html">explicit</a> &#22768;&#26126;<span class="t-rev-inl t-until-cxx11"><span>&#19988;&#21487;&#20197;&#29992;&#21333;&#20010;&#21442;&#25968;&#35843;&#29992;</span> <span><span class="t-mark-rev t-until-cxx11">(C++11 &#21069;)</span></span></span>&#30340;&#26500;&#36896;&#20989;&#25968;&#34987;&#31216;&#20026;<i>&#36716;&#25442;&#26500;&#36896;&#20989;&#25968;&#65288;converting constructor&#65289;</i>&#12290;</p>
<p>&#19982;&#21482;&#22312;<a href="cpp-language-direct_initialization.html">&#30452;&#25509;&#21021;&#22987;&#21270;</a>&#65288;&#21253;&#25324;&#22914; <a href="cpp-language-static_cast.html">static_cast</a> &#36825;&#26679;&#30340;<a href="cpp-language-explicit_cast.html">&#26174;&#24335;&#36716;&#25442;</a>&#65289;&#20013;&#34987;&#32771;&#34385;&#30340;&#26174;&#24335;&#26500;&#36896;&#20989;&#25968;&#19981;&#21516;&#65292;&#36716;&#25442;&#26500;&#36896;&#20989;&#25968;&#20063;&#20250;&#20316;&#20026;<a href="cpp-language-implicit_conversion.html">&#29992;&#25143;&#23450;&#20041;&#30340;&#36716;&#25442;&#24207;&#21015;</a>&#20013;&#30340;&#19968;&#37096;&#20998;&#32780;&#22312;<a href="cpp-language-copy_initialization.html">&#22797;&#21046;&#21021;&#22987;&#21270;</a>&#30340;&#32771;&#34385;&#33539;&#22260;&#20869;&#12290;</p>
<p>&#36890;&#24120;&#35828;&#27861;&#26159;&#36716;&#25442;&#26500;&#36896;&#20989;&#25968;&#25351;&#23450;&#20102;&#19968;&#20010;&#20174;&#23427;&#30340;&#23454;&#21442;&#31867;&#22411;&#65288;&#22914;&#26524;&#23384;&#22312;&#65289;&#21040;&#23427;&#30340;&#31867;&#31867;&#22411;&#30340;&#38544;&#24335;&#36716;&#25442;&#12290;&#27880;&#24847;&#38750;&#26174;&#24335;&#30340;<a href="cpp-language-cast_operator.html">&#29992;&#25143;&#23450;&#20041;&#36716;&#25442;&#20989;&#25968;</a>&#20063;&#25351;&#23450;&#20102;&#19968;&#20010;&#38544;&#24335;&#36716;&#25442;&#12290;</p>
<p>&#38544;&#24335;&#22768;&#26126;&#30340;&#21450;&#29992;&#25143;&#23450;&#20041;&#30340;&#38750;&#26174;&#24335;<a href="cpp-language-copy_constructor.html">&#22797;&#21046;&#26500;&#36896;&#20989;&#25968;</a>&#19982;<a href="cpp-language-move_constructor.html">&#31227;&#21160;&#26500;&#36896;&#20989;&#25968;</a>&#20063;&#26159;&#36716;&#25442;&#26500;&#36896;&#20989;&#25968;&#12290;</p>
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">&#31034;&#20363;</span></h3>
<div class="t-example">
<div class="t-example-live-link"></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;">
<div class="cpp source-cpp">
<pre class="de1"><span class="kw1">struct</span> A
<span class="br0">{</span>
A<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span> <span class="co1">// &#36716;&#25442;&#26500;&#36896;&#20989;&#25968; (C++11 &#36215;) </span>
A<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span> <span class="co1">// &#36716;&#25442;&#26500;&#36896;&#20989;&#25968;</span>
A<span class="br0">(</span><span class="kw4">int</span>, <span class="kw4">int</span><span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span> <span class="co1">// &#36716;&#25442;&#26500;&#36896;&#20989;&#25968; (C++11 &#36215;)</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw1">struct</span> B
<span class="br0">{</span>
<span class="kw1">explicit</span> B<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span>
<span class="kw1">explicit</span> B<span class="br0">(</span><span class="kw4">int</span><span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span>
<span class="kw1">explicit</span> B<span class="br0">(</span><span class="kw4">int</span>, <span class="kw4">int</span><span class="br0">)</span> <span class="br0">{</span> <span class="br0">}</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
<span class="br0">{</span>
A a1 <span class="sy1">=</span> <span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#22797;&#21046;&#21021;&#22987;&#21270;&#36873;&#25321; A::A(int)</span>
A a2<span class="br0">(</span><span class="nu0">2</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#30452;&#25509;&#21021;&#22987;&#21270;&#36873;&#25321; A::A(int)</span>
A a3<span class="br0">{</span><span class="nu0">4</span>, <span class="nu0">5</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#30452;&#25509;&#21015;&#34920;&#21021;&#22987;&#21270;&#36873;&#25321; A::A(int, int)</span>
A a4 <span class="sy1">=</span> <span class="br0">{</span><span class="nu0">4</span>, <span class="nu0">5</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#22797;&#21046;&#21015;&#34920;&#21021;&#22987;&#21270;&#36873;&#25321; A::A(int, int)</span>
A a5 <span class="sy1">=</span> <span class="br0">(</span>A<span class="br0">)</span><span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#26174;&#24335;&#36716;&#22411;&#36827;&#34892; static_cast&#65292;&#26159;&#30452;&#25509;&#21021;&#22987;&#21270;</span>
<span class="co1">// B b1 = 1; // &#38169;&#35823;&#65306;&#22797;&#21046;&#21021;&#22987;&#21270;&#19981;&#32771;&#34385; B::B(int)</span>
B b2<span class="br0">(</span><span class="nu0">2</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#30452;&#25509;&#21021;&#22987;&#21270;&#36873;&#25321; B::B(int)</span>
B b3<span class="br0">{</span><span class="nu0">4</span>, <span class="nu0">5</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#30452;&#25509;&#21015;&#34920;&#21021;&#22987;&#21270;&#36873;&#25321; B::B(int, int)</span>
<span class="co1">// B b4 = {4, 5}; // &#38169;&#35823;&#65306;&#22797;&#21046;&#21015;&#34920;&#21021;&#22987;&#21270;&#36873;&#25321;&#20102;&#26174;&#24335;&#26500;&#36896;&#20989;&#25968; B::B(int, int)</span>
B b5 <span class="sy1">=</span> <span class="br0">(</span>B<span class="br0">)</span><span class="nu0">1</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#26174;&#24335;&#36716;&#22411;&#36827;&#34892; static_cast&#65292;&#26159;&#30452;&#25509;&#21021;&#22987;&#21270;</span>
B b6<span class="sy4">;</span> <span class="co1">// OK&#65306;&#40664;&#35748;&#21021;&#22987;&#21270;</span>
B b7<span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span> <span class="co1">// OK&#65306;&#30452;&#25509;&#21015;&#34920;&#21021;&#22987;&#21270;</span>
<span class="co1">// B b8 = {}; // &#38169;&#35823;&#65306;&#22797;&#21046;&#21015;&#34920;&#21021;&#22987;&#21270;&#36873;&#25321;&#20102;&#26174;&#24335;&#26500;&#36896;&#20989;&#25968; B::B()</span>
<span class="br0">}</span></pre></div>
</div>
</div>
</div>
<div class="visualClear"></div>
</div>
</div>
</div>
</body>
</html>