{"id":1014,"date":"2023-06-29T07:11:10","date_gmt":"2023-06-29T07:11:10","guid":{"rendered":"https:\/\/www.gislxz.com\/?p=1014"},"modified":"2024-03-23T14:45:33","modified_gmt":"2024-03-23T14:45:33","slug":"effective-modern-c-%e9%98%85%e8%af%bb%e7%ac%94%e8%ae%b0","status":"publish","type":"post","link":"https:\/\/www.gislxz.com\/index.php\/2023\/06\/29\/effective-modern-c-%e9%98%85%e8%af%bb%e7%ac%94%e8%ae%b0\/","title":{"rendered":"Effective Modern C++ \u9605\u8bfb\u7b14\u8bb0"},"content":{"rendered":"\n<p><a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese?tab=readme-ov-file\" target=\"_blank\"  rel=\"nofollow\" >GitHub - CnTransGroup\/EffectiveModernCppChinese: \u300aEffective Modern C++\u300b- \u5b8c\u6210\u7ffb\u8bd1<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e00\u7ae0 \u7c7b\u578b\u63a8\u5bfc<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e1 \u7406\u89e3\u6a21\u677f\u7c7b\u578b\u63a8\u5bfc<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename T&gt;\nvoid f(ParamType param){...};\nf(expr);<\/code><\/pre>\n\n\n\n<p>\u5728\u7f16\u8bd1\u671f\uff0c\u7f16\u8bd1\u5668\u4f1a\u901a\u8fc7expr\u63a8\u5bfc\u4fe9\u4e2a\u578b\u522b\uff08T\uff0cParamType\uff09\uff0cParamType\u5e38\u4f1a\u5305\u542b\u4e00\u4e9b\u9970\u8bcd\uff0c\u5982const\u6216\u5f15\u7528\u3002\u4f8b\u5982\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename T&gt;\nvoid f(const T&amp; param){...};\nint x = 0;\nf(x);<\/code><\/pre>\n\n\n\n<p>T\u88ab\u63a8\u5bfc\u4e3aint\uff0c\u800cParamType\u88ab\u63a8\u5bfc\u4e3aconst int&amp;<\/p>\n\n\n\n<p>\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\u6a21\u677f\u51fd\u6570\u7684\u7c7b\u522b\u63a8\u5bfc\u662f\u5f88\u60f3\u5f53\u7136\u7684\uff0c\u4f46\u4e5f\u6709\u4e00\u4e9b\u7279\u6b8a\u60c5\u51b5\uff0c\u9700\u8981\u5206\u4e09\u79cd\u60c5\u51b5\u8ba8\u8bba\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ParamType\u5177\u6709\u6307\u9488\u6216\u5f15\u7528\u7c7b\u522b\uff0c\u4f46\u4e0d\u662f\u4e2a\u4e07\u80fd\u5f15\u7528<\/li>\n\n\n\n<li>ParamType\u662f\u4e00\u4e2a\u4e07\u80fd\u5f15\u7528<\/li>\n\n\n\n<li>ParamType\u65e2\u975e\u6307\u9488\u4e5f\u975e\u5f15\u7528 <\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u60c5\u51b51\uff1aParamType\u5177\u6709\u6307\u9488\u6216\u5f15\u7528\u7c7b\u522b\uff0c\u4f46\u4e0d\u662f\u4e2a\u4e07\u80fd\u5f15\u7528<\/h4>\n\n\n\n<p>\u6700\u7b80\u5355\u7684\u60c5\u51b5\uff0c\u89c4\u5219\u5982\u4e0b\uff1a<\/p>\n\n\n\n<p>1\u82e5expr\u5177\u6709\u5f15\u7528\u578b\u522b\uff0c\u5148\u5c06\u5f15\u7528\u90e8\u5206\u5ffd\u7565<\/p>\n\n\n\n<p>2\u5c14\u540e\uff0c\u5bf9expr\u7684\u578b\u522b\u548cParamType\u7684\u578b\u522b\u6267\u884c\u6a21\u5f0f\u5339\u914d\u6765\u51b3\u5b9aT\u7684\u7c7b\u522b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename T&gt;\nvoid f(T&amp; param);\n\/\/void f(T&amp;&amp; param) \u53f3\u503c\u5f15\u7528\u89c4\u5f8b\u4e00\u81f4\n\nint x = 27;\nconst int cx = x;\nconst int&amp; rx  = x;\n\nf(x); \/\/T\u7684\u578b\u522b\u662fint\uff0cparam\u7684\u578b\u522b\u662fint&amp;\nf(cx); \/\/T\u7684\u578b\u522b\u662fconst int,param\u7684\u578b\u522b\u662fconst int&amp;\nf(rx); \/\/T\u7684\u578b\u522b\u662fconst int,param\u7684\u578b\u522b\u662fconst int&amp;\n\/\/\u5411T&amp;\u7c7b\u522b\u7684\u6a21\u677f\u4f20\u5165const\u5bf9\u8c61\u662f\u5b89\u5168\u7684\uff0c\u8be5\u5bf9\u8c61\u7684\u5e38\u91cf\u6027\u4f1a\u6210\u4e3aT\u7684\u578b\u522b\u63a8\u5bfc\u7ed3\u679c\u7684\u7ec4\u6210\u90e8\u5206\n\/\/\u5373\u4f7frx\u5177\u6709\u5f15\u7528\u7c7b\u522b\uff0cT\u4e5f\u672a\u88ab\u63a8\u5bfc\u6210\u4e00\u4e2a\u5f15\u7528\uff0c\u56e0\u4e3arx\u7684\u5f15\u7528\u6027\u4f1a\u5728\u578b\u522b\u63a8\u5bfc\u8fc7\u7a0b\u4e2d\u88ab\u5ffd\u7565\n\n\/\/\u5f62\u53c2\u6539\u4e3aconst T&amp;\uff0c\u7531\u4e8e\u73b0\u5728\u5df2\u7ecf\u5047\u5b9aparam\u5177\u6709const\u5f15\u7528\u578b\u522b\uff0c\u56e0\u6b64\u5bf9\u4e8eT\u7684\u578b\u522b\u63a8\u5bfc\u4e2d\u5305\u542bconst\u5c31\u6ca1\u6709\u5fc5\u8981\u4e86\ntemplate&lt;typename T&gt;\nvoid f(const T&amp; param);\n\nint x = 27;\nconst int cx = x;\nconst int&amp; rx  = x;\n\nf(x); \/\/T\u7684\u578b\u522b\u662fint\uff0cparam\u7684\u578b\u522b\u662fconst int&amp;\nf(cx); \/\/T\u7684\u578b\u522b\u662fint,param\u7684\u578b\u522b\u662fconst int&amp;\nf(rx); \/\/T\u7684\u578b\u522b\u662fint,param\u7684\u578b\u522b\u662fconst int&amp;\n\n\/\/\u5982\u679cparam\u662f\u4e2a\u6307\u9488\ntemplate&lt;typename T&gt;\nvoid f(T* param);\n\nint x = 27;\nconst int *px = &amp;x;\n\nf(&amp;x); \/\/T\u7684\u578b\u522b\u662fint\uff0cparam\u7684\u578b\u522b\u662fint* \nf(px); \/\/T\u7684\u578b\u522b\u662fconst int\uff0cparam\u7684\u578b\u522b\u662fconst int*<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u60c5\u51b52\uff1aParamType\u662f\u4e2a\u4e07\u80fd\u5f15\u7528<\/h4>\n\n\n\n<p>\u5bf9\u4e8e\u4e07\u80fd\u5f15\u7528\u5f62\u53c2\u7684\u6a21\u677f\u800c\u8a00\uff0c\u89c4\u5219\u7a0d\u590d\u6742\u4e00\u70b9<\/p>\n\n\n\n<p>1\u5982\u679cexpr\u662f\u4e2a\u5de6\u503c\uff0cT\u548cParamType\u90fd\u4f1a\u88ab\u63a8\u5bfc\u4e3a\u5de6\u503c\u5f15\u7528\u3002\u8fd9\u4e2a\u7ed3\u679c\u5177\u6709\u53cc\u91cd\u7684\u5947\u7279\u4e4b\u5904\uff1a\u9996\u5148\uff0c\u8fd9\u662f\u5728\u6a21\u677f\u578b\u522b\u63a8\u5230\u4e2d\uff0cT\u88ab\u63a8\u5bfc\u4e3a\u5f15\u7528\u578b\u522b\u7684\u552f\u4e00\u60c5\u5f62\u3002\u5176\u6b21\uff0c\u5c3d\u7ba1\u5728\u58f0\u660e\u65f6\u4f7f\u7528\u7684\u662f\u53f3\u503c\u5f15\u7528\u8bed\u6cd5\uff0c\u5b83\u7684\u578b\u522b\u63a8\u5bfc\u7ed3\u679c\u5374\u662f\u5de6\u503c\u5f15\u7528\u3002<\/p>\n\n\n\n<p>2\u5982\u679cexpr\u662f\u4e2a\u53f3\u503c\uff0c\u5219\u5e94\u7528\u60c5\u51b51\u7684\u89c4\u5219<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename T&gt;\nvoif f(T&amp;&amp; param);\n\nint x = 27;\nconst int cx = x;\nconst int&amp; rx  = x;\n\nf(x); \/\/x\u662f\u5de6\u503c\uff0c\u6240\u4ee5T\u7684\u578b\u522b\u662fint&amp;\uff0cparam\u7684\u578b\u522b\u4e5f\u662fint&amp;\nf(cx); \/\/cx\u662f\u5de6\u503c\uff0c\u6240\u4ee5T\u7684\u578b\u522b\u662fconst int&amp;\uff0cparam\u7684\u578b\u522b\u4e5f\u662fconst int&amp;\nf(rx); \/\/rx\u662f\u5de6\u503c\uff0c\u6240\u4ee5T\u7684\u578b\u522b\u662fconst int&amp;\uff0cparam\u7684\u578b\u522b\u4e5f\u662fconst int&amp;\n\nf(27); \/\/27\u662f\u4e2a\u53f3\u503c\uff0c\u6240\u4ee5T\u7684\u578b\u522b\u662fint\uff0c\u8fd9\u4e48\u4e00\u6765\uff0cparam\u7684\u578b\u522b\u5c31\u6210\u4e86int&amp;&amp;<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u60c5\u51b53\uff1aParamType\u65e2\u975e\u6307\u9488\u4e5f\u975e\u5f15\u7528<\/h4>\n\n\n\n<p>\u5f53ParamType\u65e2\u975e\u6307\u9488\u4e5f\u975e\u5f15\u7528\u65f6\uff0c\u6211\u4eec\u9762\u5bf9\u7684\u5c31\u662f\u6240\u8c13\u6309\u503c\u4f20\u9012<\/p>\n\n\n\n<p>1\u4e00\u5982\u4e4b\u524d\uff0c\u82e5expr\u5177\u6709\u5f15\u7528\u578b\u522b\uff0c\u5219\u5ffd\u7565\u5176\u5f15\u7528\u90e8\u5206<\/p>\n\n\n\n<p>2\u5ffd\u7565expr\u7684\u5f15\u7528\u6027\u4e4b\u540e\uff0c\u82e5expr\u662f\u4e2aconst\u5bf9\u8c61\uff0c\u4e5f\u5ffd\u7565<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename T&gt;\nvoif f(T param); \/\/\u6309\u503c\u4f20\u9012\uff0c\u65e0\u8bba\u4f20\u5165\u4ec0\u4e48\u90fd\u53ea\u4f1a\u662f\u4e00\u4e2a\u526f\u672c\n\nint x = 27;\nconst int cx = x;\nconst int&amp; rx  = x;\n\nf(x); \/\/T\u548cparam\u7684\u578b\u522b\u90fd\u662fint\nf(cx); \/\/T\u548cparam\u7684\u578b\u522b\u90fd\u662fint\nf(rx); \/\/T\u548cparam\u7684\u578b\u522b\u90fd\u662fint<\/code><\/pre>\n\n\n\n<p>\u9700\u8981\u91cd\u70b9\u8bf4\u660e\u7684\u662f\uff0cconst\u4ec5\u4f1a\u5728\u6309\u503c\u5f62\u53c2\u5904\u88ab\u5ffd\u7565\u3002\u8003\u8651expr\u662f\u4e2a\u6307\u5411const\u5bf9\u8c61\u7684const\u6307\u9488\uff0c\u4e14expr\u6309\u503c\u4f20\u7ed9param\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename T&gt;\nvoif f(T param); \/\/\u6309\u503c\u4f20\u9012\uff0c\u65e0\u8bba\u4f20\u5165\u4ec0\u4e48\u90fd\u53ea\u4f1a\u662f\u4e00\u4e2a\u526f\u672c\n\nconst char* const ptr = \"fun with pointers\";\nf(ptr); \/\/param\u4e3aconst char *<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u6570\u7ec4\u5b9e\u53c2<\/h4>\n\n\n\n<p>\u6570\u7ec4\u578b\u522b\u6709\u522b\u4e8e\u6307\u9488\u578b\u522b\uff0c\u5c3d\u7ba1\u6709\u65f6\u4ed6\u4eec\u770b\u8d77\u6765\u53ef\u4ee5\u4e92\u6362\u3002\u5f62\u6210\u8fd9\u79cd\u5047\u8c61\u7684\u4e3b\u8981\u539f\u56e0\u662f\uff0c\u5728\u5f88\u591a\u8bed\u5883\u4e0b\uff0c\u6570\u7ec4\u4f1a\u9000\u5316\u6210\u6307\u5411\u5176\u9996\u5143\u7d20\u7684\u6307\u9488\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const char name&#91;] = \"J.P.Briggs\"; \/\/name\u7684\u578b\u522b\u662fconst char&#91;13]\nconst char * ptrToName = name; \/\/\u6570\u7ec4\u9000\u5316\u6210\u6307\u9488<\/code><\/pre>\n\n\n\n<p>\u5f53\u4e00\u4e2a\u6570\u7ec4\u4f20\u9012\u7ed9\u6301\u6709\u6309\u503c\u5f62\u53c2\u7684\u6a21\u677f\u65f6<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename T&gt;\nvoif f(T param);\nf(name);\/\/name\u662f\u4e2a\u6570\u7ec4\uff0c\u4f46T\u7684\u578b\u522b\u88ab\u63a8\u5bfc\u4e3aconst char*<\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u5c06\u6a21\u677f\u51fd\u6570\u4fee\u6539\u6210\u5f15\u7528<\/p>\n\n\n\n<p>template&lt;typename T&gt;<\/p>\n\n\n\n<p>voif f(T&amp; param);<\/p>\n\n\n\n<p>f(name); \/\/T\u88ab\u63a8\u5bfc\u4e3a\u6570\u7ec4\u5e76\u5305\u542b\u6570\u7ec4\u5c3a\u5bf8\uff08const char[13]\uff09 \u800cf\u7684\u5f62\u53c2\u5bf9\u88ab\u63a8\u5bfc\u4e3aconst char(&amp;)[13]<\/p>\n\n\n\n<p>\u5229\u7528\u8fd9\u4e00\u80fd\u529b\u6211\u4eec\u53ef\u4ee5\u521b\u9020\u51fa\u4e00\u4e2a\u6a21\u677f\u6765\u63a8\u5bfc\u51fa\u6570\u7ec4\u542b\u6709\u7684\u5143\u7d20\u4e2a\u6570<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/\u5c06\u51fd\u6570\u58f0\u660e\u4e3aconsexpr\uff0c\u80fd\u591f\u4f7f\u5f97\u8fd4\u56de\u503c\u5728\u7f16\u8bd1\u671f\u5c31\u53ef\u7528\u3002\u4ece\u800c\u5c31\u53ef\u4ee5\u5728\u58f0\u660e\u4e00\u7ec4\u6570\u7ec4\u65f6\uff0c\u6307\u5b9a\u5176\u5c3a\u5bf8\u548c\u53e6\u4e00\u6570\u7ec4\u76f8\u540c\ntemplate&lt;typename T,std::size_t N&gt;\nconstexpr std::size_t arraySize(T (&amp;)&#91;N]) noexcept{return N;}\nint keyVals&#91;] = {1,3,5,7,9};\nint mappedVals&#91;arraySize&#91;keyVals]];\n\/\/\u4f7f\u7528std::array\nstd::array&lt;int,arraySize(keyVals)&gt; mappedVals;<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u51fd\u6570\u5b9e\u53c2<\/h4>\n\n\n\n<p>\u6570\u7ec4\u5e76\u975e\u552f\u4e00\u53ef\u4ee5\u9000\u5316\u4e3a\u6307\u9488\u4e4b\u7269\uff0c\u51fd\u6570\u4e5f\u4f1a\u9000\u5316\u6210\u51fd\u6570\u6307\u9488<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void someFunc(int,double);\ntemplate&lt;typename T&gt;\nvoid f1(T param);\n\ntemplate f2(T&amp; param);\nvoid f2(T&amp; param)\n\nf1(someFunc); \/\/param\u88ab\u63a8\u5bfc\u4e3a\u51fd\u6570\u6307\u9488 void(*)(int,double)\nf2(someFunc); \/\/param\u88ab\u63a8\u5bfc\u4e3a\u51fd\u6570\u5f15\u7528 void(&amp;)(int,double)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e2 \u7406\u89e3auto\u578b\u522b\u63a8\u5bfc<\/h3>\n\n\n\n<p>\u9664\u4e86\u4e00\u4e2a\u5947\u5999\u7684\u4f8b\u5916\u60c5\u51b5\u610f\u5916\uff0cauto\u578b\u522b\u63a8\u5bfc\u5c31\u662f\u6a21\u677f\u578b\u522b\u63a8\u5bfc<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/\u6a21\u677f\u51fd\u6570\u4e2d\u7f16\u8bd1\u5668\u4f1a\u5229\u7528expr\u6765\u63a8\u5bfcT\u548cParamType\u7684\u578b\u522b\ntemplate&lt;typename T&gt;\nvoid f(ParamType param);\n\/\/\u5f53\u53d8\u91cf\u91c7\u7528auto\u6765\u58f0\u660e\u7684\u65f6\u5019\uff0cauto\u5c31\u626e\u6f14\u4e86T\u7684\u89d2\u8272\uff0c\u800c\u53d8\u91cf\u7684\u578b\u522b\u4fee\u9970\u8bcd\u5219\u626e\u6f14\u7684\u662fParamType\u7684\u89d2\u8272\nauto x = 27; \/\/x\u7684\u578b\u522b\u4fee\u9970\u8bcd\u5c31\u662fauto\u81ea\u8eab\nconst auto cx = x; \/\/x\u7684\u578b\u522b\u4fee\u9970\u8bcd\u662fconst auto\nconst auto&amp; rx = x; \/\/x\u7684\u578b\u522b\u4fee\u9970\u8bcd\u662fconst auto&amp;<\/code><\/pre>\n\n\n\n<p>\u4e0e\u6a21\u677f\u51fd\u6570\u4e00\u6837\u4e5f\u5206\u4e09\u79cd\u60c5\u51b5\u8ba8\u8bba<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u60c5\u51b51\uff1a\u578b\u522b\u9970\u8bcd\u662f\u6307\u9488\u6216\u5f15\u7528\uff0c\u4f46\u4e0d\u662f\u4e07\u80fd\u5f15\u7528<\/li>\n\n\n\n<li>\u60c5\u51b52\uff1a\u578b\u522b\u9970\u8bcd\u662f\u4e07\u80fd\u5f15\u7528<\/li>\n\n\n\n<li>\u60c5\u51b53\uff1a\u578b\u522b\u9970\u8bcd\u65e2\u975e\u6307\u9488\u4e5f\u975e\u5f15\u7528<\/li>\n<\/ul>\n\n\n\n<p>\u60c5\u51b51\u548c3\u5982\u4e0a\u6bb5\u4ee3\u7801\u6240\u793a\uff0c\u60c5\u51b52\u4e5f\u5f88\u6b63\u5e38<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto&amp;&amp; uref1 = x; \/\/x\u7684\u578b\u522b\u662fint\uff0c\u4e14\u662f\u5de6\u503c\uff0c\u6240\u4ee5uref1\u7684\u578b\u522b\u662fint&amp;\nauto&amp;&amp; uref2 = cx; \/\/cx\u7684\u578b\u522b\u662fconst int\uff0c\u4e14\u662f\u5de6\u503c\uff0c\u6240\u4ee5uref2\u7684\u578b\u522b\u662fconst int&amp;\nauto&amp;&amp; uref3 = 27; \/\/27\u7684\u578b\u522b\u662fint\uff0c\u4e14\u662f\u53f3\u503c\uff0c\u6240\u4ee5uref3\u7684\u578b\u522b\u662fint&amp;&amp;<\/code><\/pre>\n\n\n\n<p>\u6570\u7ec4\u548c\u51fd\u6570\u5728\u975e\u5f15\u7528\u578b\u522b\u9970\u8bcd\u7684\u524d\u63d0\u4e0b\u9000\u5316\u6210\u6307\u9488\u540c\u6837\u9002\u7528\u4e8eauto\u578b\u522b\u63a8\u5bfc<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const char name&#91;] = \"J.P.Briggs\"; \/\/name\u7684\u578b\u522b\u662fconst char&#91;13]\nauto arr1 = name; \/\/arr1\u7684\u578b\u522b\u662fconst char*\nauto&amp; arr2 = name; \/\/arr2\u7684\u578b\u522b\u662fconst char (&amp;)&#91;13]\nvoid someFunc(int,double); \/\/someFunc\u662f\u4e2a\u51fd\u6570\uff0c\u578b\u522b\u662fvoid(int,double)\nauto func1 = someFunc; \/\/func1\u7684\u578b\u522b\u662fvoid(*)(int,double)\nauto&amp; func2 = someFunc; \/\/func2\u7684\u578b\u522b\u662fvoid(&amp;)(int,double)<\/code><\/pre>\n\n\n\n<p>\u7279\u6b8a\u7684\u4e00\u79cd\u60c5\u51b5<\/p>\n\n\n\n<p>\u5173\u4e8e\u4f7f\u7528{}\u7684auto\u81ea\u52a8\u63a8\u5bfc\u60c5\u51b5\uff0c\u6d89\u53castd::initializer_list<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e3\uff1a\u7406\u89e3decltype<\/h3>\n\n\n\n<p><code>decltype<\/code>\u662f\u4e00\u4e2a\u5947\u602a\u7684\u4e1c\u897f\u3002\u7ed9\u5b83\u4e00\u4e2a\u540d\u5b57\u6216\u8005\u8868\u8fbe\u5f0f<code>decltype<\/code>\u5c31\u4f1a\u544a\u8bc9\u4f60\u8fd9\u4e2a\u540d\u5b57\u6216\u8005\u8868\u8fbe\u5f0f\u7684\u7c7b\u578b\u3002<\/p>\n\n\n\n<p>\u5728C++11\u4e2d\uff0c<code>decltype<\/code>\u6700\u4e3b\u8981\u7684\u7528\u9014\u5c31\u662f\u7528\u4e8e\u58f0\u660e\u51fd\u6570\u6a21\u677f\uff0c\u800c\u8fd9\u4e2a\u51fd\u6570\u8fd4\u56de\u7c7b\u578b\u4f9d\u8d56\u4e8e\u5f62\u53c2\u7c7b\u578b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename Container, typename Index&gt;    \/\/\u53ef\u4ee5\u5de5\u4f5c\uff0c\nauto authAndAccess(Container&amp; c, Index i)       \/\/\u4f46\u662f\u9700\u8981\u6539\u826f\n    -&gt;decltype(c&#91;i])\n{\n    authenticateUser();\n    return c&#91;i];\n}<\/code><\/pre>\n\n\n\n<p>\u51fd\u6570\u540d\u79f0\u524d\u9762\u7684<code>auto<\/code>\u4e0d\u4f1a\u505a\u4efb\u4f55\u7684\u7c7b\u578b\u63a8\u5bfc\u5de5\u4f5c\u3002\u76f8\u53cd\u7684\uff0c\u4ed6\u53ea\u662f\u6697\u793a\u4f7f\u7528\u4e86C++11\u7684<strong>\u5c3e\u7f6e\u8fd4\u56de\u7c7b\u578b<\/strong>\u8bed\u6cd5\uff0c\u5373\u5728\u51fd\u6570\u5f62\u53c2\u5217\u8868\u540e\u9762\u4f7f\u7528\u4e00\u4e2a\u201d<code>-&gt;<\/code>\u201c\u7b26\u53f7\u6307\u51fa\u51fd\u6570\u7684\u8fd4\u56de\u7c7b\u578b\uff0c\u5c3e\u7f6e\u8fd4\u56de\u7c7b\u578b\u7684\u597d\u5904\u662f\u6211\u4eec\u53ef\u4ee5\u5728\u51fd\u6570\u8fd4\u56de\u7c7b\u578b\u4e2d\u4f7f\u7528\u51fd\u6570\u5f62\u53c2\u76f8\u5173\u7684\u4fe1\u606f\u3002\u5728<code>authAndAccess<\/code>\u51fd\u6570\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528<code>c<\/code>\u548c<code>i<\/code>\u6307\u5b9a\u8fd4\u56de\u7c7b\u578b\u3002\u5982\u679c\u6211\u4eec\u6309\u7167\u4f20\u7edf\u8bed\u6cd5\u628a\u51fd\u6570\u8fd4\u56de\u7c7b\u578b\u653e\u5728\u51fd\u6570\u540d\u79f0\u4e4b\u524d\uff0c<code>c<\/code>\u548c<code>i<\/code>\u5c31\u672a\u88ab\u58f0\u660e\u6240\u4ee5\u4e0d\u80fd\u4f7f\u7528\u3002<\/p>\n\n\n\n<p>C++11\u5141\u8bb8\u81ea\u52a8\u63a8\u5bfc\u5355\u4e00\u8bed\u53e5\u7684<em>lambda<\/em>\u8868\u8fbe\u5f0f\u7684\u8fd4\u56de\u7c7b\u578b\uff0c C++14\u6269\u5c55\u5230\u5141\u8bb8\u81ea\u52a8\u63a8\u5bfc\u6240\u6709\u7684<em>lambda<\/em>\u8868\u8fbe\u5f0f\u548c\u51fd\u6570\uff0c\u751a\u81f3\u5b83\u4eec\u5185\u542b\u591a\u6761\u8bed\u53e5\u3002\u5bf9\u4e8e<code>authAndAccess<\/code>\u6765\u8bf4\u8fd9\u610f\u5473\u7740\u5728C++14\u6807\u51c6\u4e0b\u6211\u4eec\u53ef\u4ee5\u5ffd\u7565\u5c3e\u7f6e\u8fd4\u56de\u7c7b\u578b\uff0c\u53ea\u7559\u4e0b\u4e00\u4e2a<code>auto<\/code>\u3002\u4f7f\u7528\u8fd9\u79cd\u58f0\u660e\u5f62\u5f0f\uff0cauto\u6807\u793a\u8fd9\u91cc\u4f1a\u53d1\u751f\u7c7b\u578b\u63a8\u5bfc\u3002\u66f4\u51c6\u786e\u7684\u8bf4\uff0c\u7f16\u8bd1\u5668\u5c06\u4f1a\u4ece\u51fd\u6570\u5b9e\u73b0\u4e2d\u63a8\u5bfc\u51fa\u51fd\u6570\u7684\u8fd4\u56de\u7c7b\u578b\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename Container, typename Index&gt;    \/\/C++14\u7248\u672c\uff0c\nauto authAndAccess(Container&amp; c, Index i)       \/\/\u4e0d\u90a3\u4e48\u6b63\u786e\n{\n    authenticateUser();\n    return c&#91;i];                                \/\/\u4ecec&#91;i]\u4e2d\u63a8\u5bfc\u8fd4\u56de\u7c7b\u578b\n}<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/1.DeducingTypes\/item2.md\" target=\"_blank\"  rel=\"nofollow\" >Item2<\/a>\u89e3\u91ca\u4e86\u51fd\u6570\u8fd4\u56de\u7c7b\u578b\u4e2d\u4f7f\u7528<code>auto<\/code>\uff0c\u7f16\u8bd1\u5668\u5b9e\u9645\u4e0a\u662f\u4f7f\u7528\u7684\u6a21\u677f\u7c7b\u578b\u63a8\u5bfc\u7684\u90a3\u5957\u89c4\u5219\u3002\u5982\u679c\u90a3\u6837\u7684\u8bdd\u8fd9\u91cc\u5c31\u4f1a\u6709\u4e00\u4e9b\u95ee\u9898\u3002\u6b63\u5982\u6211\u4eec\u4e4b\u524d\u8ba8\u8bba\u7684\uff0c<code>operator[]<\/code>\u5bf9\u4e8e\u5927\u591a\u6570<code>T<\/code>\u7c7b\u578b\u7684\u5bb9\u5668\u4f1a\u8fd4\u56de\u4e00\u4e2a<code>T&amp;<\/code>\uff0c\u4f46\u662f<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/1.DeducingTypes\/item1.md\" target=\"_blank\"  rel=\"nofollow\" >Item1<\/a>\u89e3\u91ca\u4e86\u5728\u6a21\u677f\u7c7b\u578b\u63a8\u5bfc\u671f\u95f4\uff0c\u8868\u8fbe\u5f0f\u7684\u5f15\u7528\u6027\uff08reference-ness\uff09\u4f1a\u88ab\u5ffd\u7565\u3002\u57fa\u4e8e\u8fd9\u6837\u7684\u89c4\u5219\uff0c\u8003\u8651\u5b83\u4f1a\u5bf9\u4e0b\u9762\u7528\u6237\u7684\u4ee3\u7801\u6709\u54ea\u4e9b\u5f71\u54cd\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::deque&lt;int&gt; d;\n\u2026\nauthAndAccess(d, 5) = 10;               \/\/\u8ba4\u8bc1\u7528\u6237\uff0c\u8fd4\u56ded&#91;5]\uff0c\n                                        \/\/\u7136\u540e\u628a10\u8d4b\u503c\u7ed9\u5b83\n                                        \/\/\u65e0\u6cd5\u901a\u8fc7\u7f16\u8bd1\u5668\uff01<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e4\uff1a\u5b66\u4f1a\u67e5\u770b\u7c7b\u578b\u63a8\u5bfc\u7ed3\u679c<\/h3>\n\n\n\n<p>\u67e5\u770b\u7f16\u8bd1\u5668\u7684\u63a8\u5230\u7ed3\u679c\u4ee5\u53ca\u8fd0\u884c\u65f6\u8f93\u51fa\uff0c\u4f46\u662fIDE\u7684\u63a8\u5bfc\u5e76\u4e0d\u4e00\u5b9a\u767e\u5206\u767e\u6b63\u786e<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e8c\u7ae0 auto<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e5\uff1a \u4f18\u5148\u8003\u8651<code>auto<\/code>\u800c\u975e\u663e\u5f0f\u7c7b\u578b\u58f0\u660e<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e6\uff1a<code>auto<\/code>\u63a8\u5bfc\u82e5\u975e\u5df1\u613f\uff0c\u4f7f\u7528\u663e\u5f0f\u7c7b\u578b\u521d\u59cb\u5316\u60ef\u7528\u6cd5<\/h3>\n\n\n\n<p>\u6ce8\u610fvector&lt;bool&gt;\u7b49\u9020\u6210\u7684\u7279\u6b8a\u60c5\u51b5\uff0c\u4f7f\u7528\u663e\u793a\u58f0\u660e<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::vector&lt;bool&gt; features(const Widget&amp; w);\nauto highPriority = static_cast&lt;bool&gt;(features(w)&#91;5]);<\/code><\/pre>\n\n\n\n<p>\u6216\u8005\u660e\u786e\u8868\u793a\u6211\u8981\u51cf\u5c11\u6570\u636e\u7cbe\u5ea6<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>double calcEpsilon();\n\/\/float ep = calcEpsilon(); \/\/\u975e\u663e\u5f0f\nauto ep = static_cast&lt;float&gt;(calcEpsilon());<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u4e09\u7ae0 \u8f6c\u5411\u73b0\u4ee3C++<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e7\uff1a\u533a\u522b\u4f7f\u7528<code>()<\/code>\u548c<code>{}<\/code>\u521b\u5efa\u5bf9\u8c61<\/h3>\n\n\n\n<p>C++11\u4f7f\u7528\u7edf\u4e00\u521d\u59cb\u5316\uff08<em>uniform initialization<\/em>\uff09\u6765\u6574\u5408\u8fd9\u4e9b\u6df7\u4e71\u4e14\u4e0d\u9002\u4e8e\u6240\u6709\u60c5\u666f\u7684\u521d\u59cb\u5316\u8bed\u6cd5\uff0c\u6240\u8c13\u7edf\u4e00\u521d\u59cb\u5316\u662f\u6307\u5728\u4efb\u4f55\u6d89\u53ca\u521d\u59cb\u5316\u7684\u5730\u65b9\u90fd\u4f7f\u7528\u5355\u4e00\u7684\u521d\u59cb\u5316\u8bed\u6cd5\u3002 \u5b83\u57fa\u4e8e\u82b1\u62ec\u53f7\uff0c\u51fa\u4e8e\u8fd9\u4e2a\u539f\u56e0\u6211\u66f4\u559c\u6b22\u79f0\u4e4b\u4e3a\u62ec\u53f7\u521d\u59cb\u5316\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::vector&lt;int&gt; v{ 1, 3, 5 };  \/\/v\u521d\u59cb\u5185\u5bb9\u4e3a1,3,5<\/code><\/pre>\n\n\n\n<p>\u62ec\u53f7\u8868\u8fbe\u5f0f\u8fd8\u6709\u4e00\u4e2a\u5c11\u89c1\u7684\u7279\u6027\uff0c\u5373\u5b83\u4e0d\u5141\u8bb8\u5185\u7f6e\u7c7b\u578b\u95f4\u9690\u5f0f\u7684\u53d8\u7a84\u8f6c\u6362\uff08<em>narrowing conversion<\/em>\uff09\u3002\u5982\u679c\u4e00\u4e2a\u4f7f\u7528\u4e86\u62ec\u53f7\u521d\u59cb\u5316\u7684\u8868\u8fbe\u5f0f\u7684\u503c\uff0c\u4e0d\u80fd\u4fdd\u8bc1\u7531\u88ab\u521d\u59cb\u5316\u7684\u5bf9\u8c61\u7684\u7c7b\u578b\u6765\u8868\u793a\uff0c\u4ee3\u7801\u5c31\u4e0d\u4f1a\u901a\u8fc7\u7f16\u8bd1\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>double x, y, z;\nint sum1{ x + y + z };          \/\/\u9519\u8bef\uff01double\u7684\u548c\u53ef\u80fd\u4e0d\u80fd\u8868\u793a\u4e3aint<\/code><\/pre>\n\n\n\n<p>\u53e6\u4e00\u4e2a\u503c\u5f97\u6ce8\u610f\u7684\u7279\u6027\u662f\u62ec\u53f7\u8868\u8fbe\u5f0f\u5bf9\u4e8eC++\u6700\u4ee4\u4eba\u5934\u75bc\u7684\u89e3\u6790\u95ee\u9898\u6709\u5929\u751f\u7684\u514d\u75ab\u6027\u3002\uff08\u8bd1\u6ce8\uff1a\u6240\u8c13\u6700\u4ee4\u4eba\u5934\u75bc\u7684\u89e3\u6790\u5373<em>most vexing parse<\/em>\uff0c\u66f4\u591a\u4fe1\u606f\u8bf7\u53c2\u89c1<a href=\"https:\/\/en.wikipedia.org\/wiki\/Most_vexing_parse\" target=\"_blank\"  rel=\"nofollow\" >https:\/\/en.wikipedia.org\/wiki\/Most_vexing_parse<\/a>\u3002\uff09C++\u89c4\u5b9a\u4efb\u4f55<em>\u53ef\u4ee5\u88ab\u89e3\u6790<\/em>\u4e3a\u4e00\u4e2a\u58f0\u660e\u7684\u4e1c\u897f<em>\u5fc5\u987b\u88ab\u89e3\u6790<\/em>\u4e3a\u58f0\u660e\u3002\u8fd9\u4e2a\u89c4\u5219\u7684\u526f\u4f5c\u7528\u662f\u8ba9\u5f88\u591a\u7a0b\u5e8f\u5458\u5907\u53d7\u6298\u78e8\uff1a\u4ed6\u4eec\u53ef\u80fd\u60f3\u521b\u5efa\u4e00\u4e2a\u4f7f\u7528\u9ed8\u8ba4\u6784\u9020\u51fd\u6570\u6784\u9020\u7684\u5bf9\u8c61\uff0c\u5374\u4e0d\u5c0f\u5fc3\u53d8\u6210\u4e86\u51fd\u6570\u58f0\u660e\u3002\u95ee\u9898\u7684\u6839\u6e90\u662f\u5982\u679c\u4f60\u8c03\u7528\u5e26\u53c2\u6784\u9020\u51fd\u6570\uff0c\u4f60\u53ef\u4ee5\u8fd9\u6837\u505a\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Widget w1(10);                  \/\/\u4f7f\u7528\u5b9e\u53c210\u8c03\u7528Widget\u7684\u4e00\u4e2a\u6784\u9020\u51fd\u6570\nWidget w2();                    \/\/\u6700\u4ee4\u4eba\u5934\u75bc\u7684\u89e3\u6790\uff01\u58f0\u660e\u4e00\u4e2a\u51fd\u6570w2\uff0c\u8fd4\u56deWidget\nWidget w3{};                    \/\/\u8c03\u7528\u6ca1\u6709\u53c2\u6570\u7684\u6784\u9020\u51fd\u6570\u6784\u9020\u5bf9\u8c61<\/code><\/pre>\n\n\n\n<p>\u62ec\u53f7\u521d\u59cb\u5316\u7684\u7f3a\u70b9\u662f\u6709\u65f6\u5b83\u6709\u4e00\u4e9b\u4ee4\u4eba\u60ca\u8bb6\u7684\u884c\u4e3a\u3002\u8fd9\u4e9b\u884c\u4e3a\u4f7f\u5f97\u62ec\u53f7\u521d\u59cb\u5316\u3001<code>std::initializer_list<\/code>\u548c\u6784\u9020\u51fd\u6570\u53c2\u4e0e\u91cd\u8f7d\u51b3\u8bae\u65f6\u672c\u6765\u5c31\u4e0d\u6e05\u4e0d\u695a\u7684\u66a7\u6627\u5173\u7cfb\u8fdb\u4e00\u6b65\u6df7\u4e71\u3002\u628a\u5b83\u4eec\u653e\u5230\u4e00\u8d77\u4f1a\u8ba9\u770b\u8d77\u6765\u5e94\u8be5\u5de6\u8f6c\u7684\u4ee3\u7801\u53f3\u8f6c\u3002\u4e3e\u4e2a\u4f8b\u5b50\uff0c<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/1.DeducingTypes\/item2.md\" target=\"_blank\"  rel=\"nofollow\" >Item2<\/a>\u89e3\u91ca\u4e86\u5f53<code>auto<\/code>\u58f0\u660e\u7684\u53d8\u91cf\u4f7f\u7528\u82b1\u62ec\u53f7\u521d\u59cb\u5316\uff0c\u53d8\u91cf\u7c7b\u578b\u4f1a\u88ab\u63a8\u5bfc\u4e3a<code>std::initializer_list<\/code>\uff0c\u4f46\u662f\u4f7f\u7528\u76f8\u540c\u5185\u5bb9\u7684\u5176\u4ed6\u521d\u59cb\u5316\u65b9\u5f0f\u4f1a\u4ea7\u751f\u66f4\u7b26\u5408\u76f4\u89c9\u7684\u7ed3\u679c\u3002\u6240\u4ee5\uff0c\u4f60\u8d8a\u559c\u6b22\u7528<code>auto<\/code>\uff0c\u4f60\u5c31\u8d8a\u4e0d\u80fd\u7528\u62ec\u53f7\u521d\u59cb\u5316\u3002<\/p>\n\n\n\n<p>\u5c24\u5176\u6ce8\u610f<code>std::initializer_list<\/code>\u5e26\u6765\u7684\u5f71\u54cd\uff0c\u5f53\u4f60\u7ed9\u4e00\u4e2a\u7c7b\u6dfb\u52a0\u4e00\u4e2a\u5305\u542b<code>std::initializer_list<\/code>\u5f62\u53c2\u7684\u6784\u9020\u51fd\u6570\u65f6\uff0c\u53ef\u80fd\u4f1a\u5bfc\u81f4\u5df2\u6709\u4ee3\u7801\u9519\u8bef\u8c03\u7528\u81f3\u65b0\u6784\u9020\u51fd\u6570\u3002<\/p>\n\n\n\n<p>\u8fd9\u91cc\u8fd8\u6709\u4e00\u4e2a\u6709\u8da3\u7684<a href=\"https:\/\/en.wikipedia.org\/wiki\/Edge_case\" target=\"_blank\"  rel=\"nofollow\" >\u8fb9\u7f18\u60c5\u51b5<\/a>\u3002\u5047\u5982\u4f60\u4f7f\u7528\u7684\u82b1\u62ec\u53f7\u521d\u59cb\u5316\u662f\u7a7a\u96c6\uff0c\u5e76\u4e14\u4f60\u6b32\u6784\u5efa\u7684\u5bf9\u8c61\u6709\u9ed8\u8ba4\u6784\u9020\u51fd\u6570\uff0c\u4e5f\u6709<code>std::initializer_list<\/code>\u6784\u9020\u51fd\u6570\u3002\u4f60\u7684\u7a7a\u7684\u82b1\u62ec\u53f7\u610f\u5473\u7740\u4ec0\u4e48\uff1f\u5982\u679c\u5b83\u4eec\u610f\u5473\u7740\u6ca1\u6709\u5b9e\u53c2\uff0c\u5c31\u8be5\u4f7f\u7528\u9ed8\u8ba4\u6784\u9020\u51fd\u6570\uff0c\u4f46\u5982\u679c\u5b83\u610f\u5473\u7740\u4e00\u4e2a\u7a7a\u7684<code>std::initializer_list<\/code>\uff0c\u5c31\u8be5\u8c03\u7528<code>std::initializer_list<\/code>\u6784\u9020\u51fd\u6570\u3002<\/p>\n\n\n\n<p>\u6700\u7ec8\u4f1a\u8c03\u7528\u9ed8\u8ba4\u6784\u9020\u51fd\u6570\u3002\u7a7a\u7684\u82b1\u62ec\u53f7\u610f\u5473\u7740\u6ca1\u6709\u5b9e\u53c2\uff0c\u4e0d\u662f\u4e00\u4e2a\u7a7a\u7684<code>std::initializer_list<\/code>\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Widget { \npublic:  \n    Widget();                                   \/\/\u9ed8\u8ba4\u6784\u9020\u51fd\u6570\n    Widget(std::initializer_list&lt;int&gt; il);      \/\/std::initializer_list\u6784\u9020\u51fd\u6570\n\n    \u2026                                           \/\/\u6ca1\u6709\u9690\u5f0f\u8f6c\u6362\u51fd\u6570\n};\n\nWidget w1;                      \/\/\u8c03\u7528\u9ed8\u8ba4\u6784\u9020\u51fd\u6570\nWidget w2{};                    \/\/\u4e5f\u8c03\u7528\u9ed8\u8ba4\u6784\u9020\u51fd\u6570\nWidget w3();                    \/\/\u6700\u4ee4\u4eba\u5934\u75bc\u7684\u89e3\u6790\uff01\u58f0\u660e\u4e00\u4e2a\u51fd\u6570<\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u4f60<strong>\u60f3<\/strong>\u7528\u7a7a<code>std::initializer<\/code>\u6765\u8c03\u7528<code>std::initializer_list<\/code>\u6784\u9020\u51fd\u6570\uff0c\u4f60\u5c31\u5f97\u521b\u5efa\u4e00\u4e2a\u7a7a\u82b1\u62ec\u53f7\u4f5c\u4e3a\u51fd\u6570\u5b9e\u53c2\u2014\u2014\u628a\u7a7a\u82b1\u62ec\u53f7\u653e\u5728\u5706\u62ec\u53f7\u6216\u8005\u53e6\u4e00\u4e2a\u82b1\u62ec\u53f7\u5185\u6765\u754c\u5b9a\u4f60\u60f3\u4f20\u9012\u7684\u4e1c\u897f\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Widget w4({});                  \/\/\u4f7f\u7528\u7a7a\u82b1\u62ec\u53f7\u5217\u8868\u8c03\u7528std::initializer_list\u6784\u9020\u51fd\u6570\nWidget w5{{}};                  \/\/\u540c\u4e0a<\/code><\/pre>\n\n\n\n<p>\u6b64\u65f6\uff0c\u62ec\u53f7\u521d\u59cb\u5316\uff0c<code>std::initializer_list<\/code>\u548c\u6784\u9020\u51fd\u6570\u91cd\u8f7d\u7684\u6666\u6da9\u89c4\u5219\u5c31\u4f1a\u4e00\u4e0b\u5b50\u6d8c\u8fdb\u4f60\u7684\u8111\u888b\uff0c\u4f60\u53ef\u80fd\u4f1a\u60f3\u7814\u7a76\u534a\u5929\u8fd9\u4e9b\u4e1c\u897f\u5728\u4f60\u7684\u65e5\u5e38\u7f16\u7a0b\u4e2d\u5230\u5e95\u5360\u591a\u5927\u6bd4\u4f8b\u3002\u53ef\u80fd\u6bd4\u4f60\u60f3\u8c61\u7684\u8981\u6709\u7528\u3002\u56e0\u4e3a<code>std::vector<\/code>\u4f5c\u4e3a\u53d7\u4f17\u4e4b\u4e00\u4f1a\u76f4\u63a5\u53d7\u5230\u5f71\u54cd\u3002<code>std::vector<\/code>\u6709\u4e00\u4e2a\u975e<code>std::initializer_list<\/code>\u6784\u9020\u51fd\u6570\u5141\u8bb8\u4f60\u53bb\u6307\u5b9a\u5bb9\u5668\u7684\u521d\u59cb\u5927\u5c0f\uff0c\u4ee5\u53ca\u4f7f\u7528\u4e00\u4e2a\u503c\u586b\u6ee1\u4f60\u7684\u5bb9\u5668\u3002\u4f46\u5b83\u4e5f\u6709\u4e00\u4e2a<code>std::initializer_list<\/code>\u6784\u9020\u51fd\u6570\u5141\u8bb8\u4f60\u4f7f\u7528\u82b1\u62ec\u53f7\u91cc\u9762\u7684\u503c\u521d\u59cb\u5316\u5bb9\u5668\u3002\u5982\u679c\u4f60\u521b\u5efa\u4e00\u4e2a\u6570\u503c\u7c7b\u578b\u7684<code>std::vector<\/code>\uff08\u6bd4\u5982<code>std::vector&lt;int&gt;<\/code>\uff09\uff0c\u7136\u540e\u4f60\u4f20\u9012\u4e24\u4e2a\u5b9e\u53c2\uff0c\u628a\u8fd9\u4e24\u4e2a\u5b9e\u53c2\u653e\u5230\u5706\u62ec\u53f7\u548c\u653e\u5230\u82b1\u62ec\u53f7\u4e2d\u6709\u5929\u58e4\u4e4b\u522b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::vector&lt;int&gt; v1(10, 20);    \/\/\u4f7f\u7528\u975estd::initializer_list\u6784\u9020\u51fd\u6570\n                                \/\/\u521b\u5efa\u4e00\u4e2a\u5305\u542b10\u4e2a\u5143\u7d20\u7684std::vector\uff0c\n                                \/\/\u6240\u6709\u7684\u5143\u7d20\u7684\u503c\u90fd\u662f20\nstd::vector&lt;int&gt; v2{10, 20};    \/\/\u4f7f\u7528std::initializer_list\u6784\u9020\u51fd\u6570\n                                \/\/\u521b\u5efa\u5305\u542b\u4e24\u4e2a\u5143\u7d20\u7684std::vector\uff0c\n                                \/\/\u5143\u7d20\u7684\u503c\u4e3a10\u548c20<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e8\uff1a\u4f18\u5148\u8003\u8651<code>nullptr<\/code>\u800c\u975e<code>0<\/code>\u548c<code>NULL<\/code><\/h3>\n\n\n\n<p>\u6a21\u677f\u7c7b\u578b\u63a8\u5bfc\u5c06<code>0<\/code>\u548c<code>NULL<\/code>\u63a8\u5bfc\u4e3a\u4e00\u4e2a\u9519\u8bef\u7684\u7c7b\u578b\uff08\u5373\u5b83\u4eec\u7684\u5b9e\u9645\u7c7b\u578b\uff0c\u800c\u4e0d\u662f\u4f5c\u4e3a\u7a7a\u6307\u9488\u7684\u9690\u542b\u610f\u4e49\uff09\uff0c\u8fd9\u5c31\u5bfc\u81f4\u5728\u5f53\u4f60\u60f3\u8981\u4e00\u4e2a\u7a7a\u6307\u9488\u65f6\uff0c\u5b83\u4eec\u7684\u66ff\u4ee3\u54c1<code>nullptr<\/code>\u5f88\u5438\u5f15\u4eba\u3002\u4f7f\u7528<code>nullptr<\/code>\uff0c\u6a21\u677f\u4e0d\u4f1a\u6709\u4ec0\u4e48\u7279\u6b8a\u7684\u8f6c\u6362\u3002\u53e6\u5916\uff0c\u4f7f\u7528<code>nullptr<\/code>\u4e0d\u4f1a\u8ba9\u4f60\u53d7\u5230\u540c\u91cd\u8f7d\u51b3\u8bae\u7279\u6b8a\u5bf9\u5f85<code>0<\/code>\u548c<code>NULL<\/code>\u4e00\u6837\u7684\u5f85\u9047\u3002\u5f53\u4f60\u60f3\u7528\u4e00\u4e2a\u7a7a\u6307\u9488\uff0c\u4f7f\u7528<code>nullptr<\/code>\uff0c\u4e0d\u7528<code>0<\/code>\u6216\u8005<code>NULL<\/code>\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e9\uff1a\u4f18\u5148\u8003\u8651\u522b\u540d\u58f0\u660e\u800c\u975e<code>typedef<\/code><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/FP\u662f\u4e00\u4e2a\u6307\u5411\u51fd\u6570\u7684\u6307\u9488\u7684\u540c\u4e49\u8bcd\uff0c\u5b83\u6307\u5411\u7684\u51fd\u6570\u5e26\u6709\n\/\/int\u548cconst std::string&amp;\u5f62\u53c2\uff0c\u4e0d\u8fd4\u56de\u4efb\u4f55\u4e1c\u897f\ntypedef void (*FP)(int, const std::string&amp;);    \/\/typedef\n\n\/\/\u542b\u4e49\u540c\u4e0a\nusing FP = void (*)(int, const std::string&amp;);   \/\/\u522b\u540d\u58f0\u660e<\/code><\/pre>\n\n\n\n<p>\u5f53\u7136\uff0c\u4e24\u4e2a\u7ed3\u6784\u90fd\u4e0d\u662f\u975e\u5e38\u8ba9\u4eba\u6ee1\u610f\uff0c\u6ca1\u6709\u4eba\u559c\u6b22\u82b1\u5927\u91cf\u7684\u65f6\u95f4\u5904\u7406\u51fd\u6570\u6307\u9488\u7c7b\u578b\u7684\u522b\u540d\uff08\u8bd1\u6ce8\uff1a\u6307<code>FP<\/code>\uff09\uff0c\u6240\u4ee5\u81f3\u5c11\u5728\u8fd9\u91cc\uff0c\u6ca1\u6709\u4e00\u4e2a\u5438\u5f15\u4eba\u7684\u7406\u7531\u8ba9\u4f60\u89c9\u5f97\u522b\u540d\u58f0\u660e\u6bd4<code>typedef<\/code>\u597d\u3002<\/p>\n\n\n\n<p>\u4e0d\u8fc7\u6709\u4e00\u4e2a\u5730\u65b9\u4f7f\u7528\u522b\u540d\u58f0\u660e\u5438\u5f15\u4eba\u7684\u7406\u7531\u662f\u5b58\u5728\u7684\uff1a\u6a21\u677f\u3002\u7279\u522b\u5730\uff0c\u522b\u540d\u58f0\u660e\u53ef\u4ee5\u88ab\u6a21\u677f\u5316\uff08\u8fd9\u79cd\u60c5\u51b5\u4e0b\u79f0\u4e3a\u522b\u540d\u6a21\u677f<em>alias template<\/em>s\uff09\u4f46\u662f<code>typedef<\/code>\u4e0d\u80fd\u3002\u8fd9\u4f7f\u5f97C++11\u7a0b\u5e8f\u5458\u53ef\u4ee5\u5f88\u76f4\u63a5\u7684\u8868\u8fbe\u4e00\u4e9bC++98\u4e2d\u53ea\u80fd\u628a<code>typedef<\/code>\u5d4c\u5957\u8fdb\u6a21\u677f\u5316\u7684<code>struct<\/code>\u624d\u80fd\u8868\u8fbe\u7684\u4e1c\u897f\u3002\u8003\u8651\u4e00\u4e2a\u94fe\u8868\u7684\u522b\u540d\uff0c\u94fe\u8868\u4f7f\u7528\u81ea\u5b9a\u4e49\u7684\u5185\u5b58\u5206\u914d\u5668\uff0c<code>MyAlloc<\/code>\u3002\u4f7f\u7528\u522b\u540d\u6a21\u677f\uff0c\u8fd9\u771f\u662f\u592a\u5bb9\u6613\u4e86\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename T&gt;                            \/\/MyAllocList&lt;T&gt;\u662f\nusing MyAllocList = std::list&lt;T, MyAlloc&lt;T&gt;&gt;;   \/\/std::list&lt;T, MyAlloc&lt;T&gt;&gt;\n                                                \/\/\u7684\u540c\u4e49\u8bcd\n\nMyAllocList&lt;Widget&gt; lw;                         \/\/\u7528\u6237\u4ee3\u7801<\/code><\/pre>\n\n\n\n<p>C++11\u5728<em>type traits<\/em>\uff08\u7c7b\u578b\u7279\u6027\uff09\u4e2d\u7ed9\u4e86\u4f60\u4e00\u7cfb\u5217\u5de5\u5177\u53bb\u5b9e\u73b0\u7c7b\u578b\u8f6c\u6362\uff0c\u5982\u679c\u8981\u4f7f\u7528\u8fd9\u4e9b\u6a21\u677f\u8bf7\u5305\u542b\u5934\u6587\u4ef6<code>&lt;type_traits&gt;<\/code>\u3002\u91cc\u9762\u6709\u8bb8\u8bb8\u591a\u591a<em>type traits<\/em>\uff0c\u4e5f\u4e0d\u5168\u662f\u7c7b\u578b\u8f6c\u6362\u7684\u5de5\u5177\uff0c\u4e5f\u5305\u542b\u4e00\u4e9b\u53ef\u9884\u6d4b\u63a5\u53e3\u7684\u5de5\u5177\u3002\u7ed9\u4e00\u4e2a\u4f60\u60f3\u65bd\u52a0\u8f6c\u6362\u7684\u7c7b\u578b<code>T<\/code>\uff0c\u7ed3\u679c\u7c7b\u578b\u5c31\u662f<code>std::<\/code>transformation<code>&lt;T&gt;::type<\/code>\u3002<\/p>\n\n\n\n<p>\u5c3d\u7ba1\u5199\u4e86\u4e00\u4e9b\uff0c\u4f46\u6211\u8fd9\u91cc\u4e0d\u662f\u60f3\u7ed9\u4f60\u4e00\u4e2a\u5173\u4e8e<em>type traits<\/em>\u4f7f\u7528\u7684\u6559\u7a0b\u3002\u6ce8\u610f\u7c7b\u578b\u8f6c\u6362\u5c3e\u90e8\u7684<code>::type<\/code>\u3002\u5982\u679c\u4f60\u5728\u4e00\u4e2a\u6a21\u677f\u5185\u90e8\u5c06\u4ed6\u4eec\u65bd\u52a0\u5230\u7c7b\u578b\u5f62\u53c2\u4e0a\uff08\u5b9e\u9645\u4ee3\u7801\u4e2d\u4f60\u4e5f\u603b\u662f\u8fd9\u4e48\u7528\uff09\uff0c\u4f60\u4e5f\u9700\u8981\u5728\u5b83\u4eec\u524d\u9762\u52a0\u4e0a<code>typename<\/code>\u3002\u81f3\u4e8e\u4e3a\u4ec0\u4e48\u8981\u8fd9\u4e48\u505a\u662f\u56e0\u4e3a\u8fd9\u4e9bC++11\u7684<em>type traits<\/em>\u662f\u901a\u8fc7\u5728<code>struct<\/code>\u5185\u5d4c\u5957<code>typedef<\/code>\u6765\u5b9e\u73b0\u7684\u3002\u662f\u7684\uff0c\u5b83\u4eec\u4f7f\u7528\u7c7b\u578b\u540c\u4e49\u8bcd\uff08\u8bd1\u6ce8\uff1a\u6839\u636e\u4e0a\u4e0b\u6587\u6307\u7684\u662f\u4f7f\u7528<code>typedef<\/code>\u7684\u505a\u6cd5\uff09\u6280\u672f\u5b9e\u73b0\uff0c\u800c\u6b63\u5982\u6211\u4e4b\u524d\u6240\u8bf4\u8fd9\u6bd4\u522b\u540d\u58f0\u660e\u8981\u5dee\u3002<\/p>\n\n\n\n<p>\u5173\u4e8e\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u5b9e\u73b0\u662f\u6709\u5386\u53f2\u539f\u56e0\u7684\uff0c\u4f46\u662f\u6211\u4eec\u8df3\u8fc7\u5b83\uff08\u6211\u8ba4\u4e3a\u592a\u65e0\u804a\u4e86\uff09\uff0c\u56e0\u4e3a\u6807\u51c6\u59d4\u5458\u4f1a\u6ca1\u6709\u53ca\u65f6\u8ba4\u8bc6\u5230\u522b\u540d\u58f0\u660e\u662f\u66f4\u597d\u7684\u9009\u62e9\uff0c\u6240\u4ee5\u76f4\u5230C++14\u5b83\u4eec\u624d\u63d0\u4f9b\u4e86\u4f7f\u7528\u522b\u540d\u58f0\u660e\u7684\u7248\u672c\u3002\u8fd9\u4e9b\u522b\u540d\u58f0\u660e\u6709\u4e00\u4e2a\u901a\u7528\u5f62\u5f0f\uff1a\u5bf9\u4e8eC++11\u7684\u7c7b\u578b\u8f6c\u6362<code>std::<\/code>transformation<code>&lt;T&gt;::type<\/code>\u5728C++14\u4e2d\u53d8\u6210\u4e86<code>std::<\/code>transformation<code>_t<\/code>\u3002\u4e3e\u4e2a\u4f8b\u5b50\u6216\u8bb8\u66f4\u5bb9\u6613\u7406\u89e3\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::remove_const&lt;T&gt;::type          \/\/\u4ececonst T\u4e2d\u4ea7\u51faT\nstd::remove_reference&lt;T&gt;::type      \/\/\u4eceT&amp;\u548cT&amp;&amp;\u4e2d\u4ea7\u51faT\nstd::add_lvalue_reference&lt;T&gt;::type  \/\/\u4eceT\u4e2d\u4ea7\u51faT&amp;\n\nstd::remove_const&lt;T&gt;::type          \/\/C++11: const T \u2192 T \nstd::remove_const_t&lt;T&gt;              \/\/C++14 \u7b49\u4ef7\u5f62\u5f0f\n\nstd::remove_reference&lt;T&gt;::type      \/\/C++11: T&amp;\/T&amp;&amp; \u2192 T \nstd::remove_reference_t&lt;T&gt;          \/\/C++14 \u7b49\u4ef7\u5f62\u5f0f\n\nstd::add_lvalue_reference&lt;T&gt;::type  \/\/C++11: T \u2192 T&amp; \nstd::add_lvalue_reference_t&lt;T&gt;      \/\/C++14 \u7b49\u4ef7\u5f62\u5f0f\n\ntemplate &lt;class T&gt; \nusing remove_const_t = typename remove_const&lt;T&gt;::type;\n\ntemplate &lt;class T&gt; \nusing remove_reference_t = typename remove_reference&lt;T&gt;::type;\n\ntemplate &lt;class T&gt; \nusing add_lvalue_reference_t =\n  typename add_lvalue_reference&lt;T&gt;::type; <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e10\uff1a\u4f18\u5148\u8003\u8651\u9650\u57df<code>enum<\/code>\u800c\u975e\u672a\u9650\u57df<code>enum<\/code><\/h3>\n\n\n\n<p>\u901a\u5e38\u6765\u8bf4\uff0c\u5728\u82b1\u62ec\u53f7\u4e2d\u58f0\u660e\u4e00\u4e2a\u540d\u5b57\u4f1a\u9650\u5236\u5b83\u7684\u4f5c\u7528\u57df\u5728\u82b1\u62ec\u53f7\u4e4b\u5185\u3002\u4f46\u8fd9\u5bf9\u4e8eC++98\u98ce\u683c\u7684<code>enum<\/code>\u4e2d\u58f0\u660e\u7684\u679a\u4e3e\u540d\uff08\u8bd1\u6ce8\uff1a<em>enumerator<\/em>\uff0c\u8fde\u540c\u4e0b\u6587\u201c\u679a\u4e3e\u540d\u201d\u90fd\u6307<em>enumerator<\/em>\uff09\u662f\u4e0d\u6210\u7acb\u7684\u3002\u8fd9\u4e9b\u679a\u4e3e\u540d\u7684\u540d\u5b57\uff08\u8bd1\u6ce8\uff1a<em>enumerator<\/em>&nbsp;names\uff0c\u8fde\u540c\u4e0b\u6587\u201c\u540d\u5b57\u201d\u90fd\u6307names\uff09\u5c5e\u4e8e\u5305\u542b\u8fd9\u4e2a<code>enum<\/code>\u7684\u4f5c\u7528\u57df\uff0c\u8fd9\u610f\u5473\u7740\u4f5c\u7528\u57df\u5185\u4e0d\u80fd\u542b\u6709\u76f8\u540c\u540d\u5b57\u7684\u5176\u4ed6\u4e1c\u897f\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enum Color { black, white, red };   \/\/black, white, red\u5728\n                                    \/\/Color\u6240\u5728\u7684\u4f5c\u7528\u57df\nauto white = false;                 \/\/\u9519\u8bef! white\u65e9\u5df2\u5728\u8fd9\u4e2a\u4f5c\u7528\n                                    \/\/\u57df\u4e2d\u58f0\u660e<\/code><\/pre>\n\n\n\n<p>\u8fd9\u4e9b\u679a\u4e3e\u540d\u7684\u540d\u5b57\u6cc4\u6f0f\u8fdb\u5b83\u4eec\u6240\u88ab\u5b9a\u4e49\u7684<code>enum<\/code>\u5728\u7684\u90a3\u4e2a\u4f5c\u7528\u57df\uff0c\u8fd9\u4e2a\u4e8b\u5b9e\u6709\u4e00\u4e2a\u5b98\u65b9\u7684\u672f\u8bed\uff1a\u672a\u9650\u57df\u679a\u4e3e(<em>unscoped&nbsp;<code>enum<\/code><\/em>)\u3002\u5728C++11\u4e2d\u5b83\u4eec\u6709\u4e00\u4e2a\u76f8\u4f3c\u7269\uff0c\u9650\u57df\u679a\u4e3e(<em>scoped&nbsp;<code>enum<\/code><\/em>)\uff0c\u5b83\u4e0d\u4f1a\u5bfc\u81f4\u679a\u4e3e\u540d\u6cc4\u6f0f\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enum class Color { black, white, red }; \/\/black, white, red\n                                        \/\/\u9650\u5236\u5728Color\u57df\u5185\nauto white = false;                     \/\/\u6ca1\u95ee\u9898\uff0c\u57df\u5185\u6ca1\u6709\u5176\u4ed6\u201cwhite\u201d\n\nColor c = white;                        \/\/\u9519\u8bef\uff0c\u57df\u4e2d\u6ca1\u6709\u679a\u4e3e\u540d\u53ebwhite\n\nColor c = Color::white;                 \/\/\u6ca1\u95ee\u9898\nauto c = Color::white;                  \/\/\u4e5f\u6ca1\u95ee\u9898\uff08\u4e5f\u7b26\u5408Item5\u7684\u5efa\u8bae\uff09<\/code><\/pre>\n\n\n\n<p>\u56e0\u4e3a\u9650\u57df<code>enum<\/code>\u662f\u901a\u8fc7\u201c<code>enum class<\/code>\u201d\u58f0\u660e\uff0c\u6240\u4ee5\u5b83\u4eec\u6709\u65f6\u5019\u4e5f\u88ab\u79f0\u4e3a\u679a\u4e3e\u7c7b(<em><code>enum<\/code>&nbsp;classes<\/em>)\u3002<\/p>\n\n\n\n<p>\u4f7f\u7528\u9650\u57df<code>enum<\/code>\u6765\u51cf\u5c11\u547d\u540d\u7a7a\u95f4\u6c61\u67d3\uff0c\u8fd9\u662f\u4e00\u4e2a\u8db3\u591f\u5408\u7406\u4f7f\u7528\u5b83\u800c\u4e0d\u662f\u5b83\u7684\u540c\u80de\u672a\u9650\u57df<code>enum<\/code>\u7684\u7406\u7531\uff0c\u5176\u5b9e\u9650\u57df<code>enum<\/code>\u8fd8\u6709\u7b2c\u4e8c\u4e2a\u5438\u5f15\u4eba\u7684\u4f18\u70b9\uff1a\u5728\u5b83\u7684\u4f5c\u7528\u57df\u4e2d\uff0c\u679a\u4e3e\u540d\u662f\u5f3a\u7c7b\u578b\u3002\u672a\u9650\u57df<code>enum<\/code>\u4e2d\u7684\u679a\u4e3e\u540d\u4f1a\u9690\u5f0f\u8f6c\u6362\u4e3a\u6574\u578b\uff08\u73b0\u5728\uff0c\u4e5f\u53ef\u4ee5\u8f6c\u6362\u4e3a\u6d6e\u70b9\u7c7b\u578b\uff09\u3002\u56e0\u6b64\u4e0b\u9762\u8fd9\u79cd\u6b6a\u66f2\u8bed\u4e49\u7684\u505a\u6cd5\u4e5f\u662f\u5b8c\u5168\u6709\u6548\u7684\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enum Color { black, white, red };       \/\/\u672a\u9650\u57dfenum\n\nstd::vector&lt;std::size_t&gt;                \/\/func\u8fd4\u56dex\u7684\u8d28\u56e0\u5b50\n  primeFactors(std::size_t x);\n\nColor c = red;\n\u2026\n\nif (c &lt; 14.5) {                         \/\/ Color\u4e0edouble\u6bd4\u8f83 (!)\n    auto factors =                      \/\/ \u8ba1\u7b97\u4e00\u4e2aColor\u7684\u8d28\u56e0\u5b50(!)\n      primeFactors(c);\n    \u2026\n}\n\nenum class Color { black, white, red }; \/\/Color\u73b0\u5728\u662f\u9650\u57dfenum\n\nColor c = Color::red;                   \/\/\u548c\u4e4b\u524d\u4e00\u6837\uff0c\u53ea\u662f\n...                                     \/\/\u591a\u4e86\u4e00\u4e2a\u57df\u4fee\u9970\u7b26\n\nif (c &lt; 14.5) {                         \/\/\u9519\u8bef\uff01\u4e0d\u80fd\u6bd4\u8f83\n                                        \/\/Color\u548cdouble\n    auto factors =                      \/\/\u9519\u8bef\uff01\u4e0d\u80fd\u5411\u53c2\u6570\u4e3astd::size_t\n      primeFactors(c);                  \/\/\u7684\u51fd\u6570\u4f20\u9012Color\u53c2\u6570\n    \u2026\n}<\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u4f60\u771f\u7684\u5f88\u60f3\u6267\u884c<code>Color<\/code>\u5230\u5176\u4ed6\u7c7b\u578b\u7684\u8f6c\u6362\uff0c\u548c\u5e73\u5e38\u4e00\u6837\uff0c\u4f7f\u7528\u6b63\u786e\u7684\u7c7b\u578b\u8f6c\u6362\u8fd0\u7b97\u7b26\u626d\u66f2\u7c7b\u578b\u7cfb\u7edf\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (static_cast&lt;double&gt;(c) &lt; 14.5) {    \/\/\u5947\u602a\u7684\u4ee3\u7801\uff0c\n                                        \/\/\u4f46\u662f\u6709\u6548\n    auto factors =                                  \/\/\u6709\u95ee\u9898\uff0c\u4f46\u662f\n      primeFactors(static_cast&lt;std::size_t&gt;(c));    \/\/\u80fd\u901a\u8fc7\u7f16\u8bd1\n    \u2026\n}<\/code><\/pre>\n\n\n\n<p>\u6b64\u5916\u679a\u4e3e\u7c7b\u578b\u53ef\u4ee5\u524d\u7f6e\u58f0\u660e\u4ee5\u53ca\u8bbe\u7f6e\u5e95\u5c42\u578b\u522b<\/p>\n\n\n\n<p>\u8981\u4e3a\u975e\u9650\u57df<code>enum<\/code>\u6307\u5b9a\u5e95\u5c42\u7c7b\u578b\uff0c\u4f60\u53ef\u4ee5\u540c\u4e0a\uff0c\u7ed3\u679c\u5c31\u53ef\u4ee5\u524d\u5411\u58f0\u660e\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enum Color: std::uint8_t;   \/\/\u975e\u9650\u57dfenum\u524d\u5411\u58f0\u660e\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/\/\u5e95\u5c42\u7c7b\u578b\u4e3a\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\/\/std::uint8_t<\/code><\/pre>\n\n\n\n<p>\u5e95\u5c42\u7c7b\u578b\u8bf4\u660e\u4e5f\u53ef\u4ee5\u653e\u5230<code>enum<\/code>\u5b9a\u4e49\u5904\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enum class Status: std::uint32_t { good = 0,\n                                   failed = 1,\n                                   incomplete = 100,\n                                   corrupt = 200,\n                                   audited = 500,\n                                   indeterminate = 0xFFFFFFFF\n                                 };<\/code><\/pre>\n\n\n\n<p>\u975e\u9650\u57df<code>enum<\/code>\u4e0etuple\u534f\u4f5c\u4f7f\u7528<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>using UserInfo =                \/\/\u7c7b\u578b\u522b\u540d\uff0c\u53c2\u89c1Item9\n    std::tuple&lt;std::string,     \/\/\u540d\u5b57\n               std::string,     \/\/email\u5730\u5740\n               std::size_t&gt; ;   \/\/\u58f0\u671b\nenum UserInfoFields { uiName, uiEmail, uiReputation };\n\nUserInfo uInfo;                         \/\/\u540c\u4e4b\u524d\u4e00\u6837\n\u2026\nauto val = std::get&lt;uiEmail&gt;(uInfo);    \/\/\u554a\uff0c\u83b7\u53d6\u7528\u6237email\u5b57\u6bb5\u7684\u503c<\/code><\/pre>\n\n\n\n<p>\u4e4b\u6240\u4ee5\u5b83\u80fd\u6b63\u5e38\u5de5\u4f5c\u662f\u56e0\u4e3a<code>UserInfoFields<\/code>\u4e2d\u7684\u679a\u4e3e\u540d\u9690\u5f0f\u8f6c\u6362\u6210<code>std::size_t<\/code>\u4e86\uff0c\u5176\u4e2d<code>std::size_t<\/code>\u662f<code>std::get<\/code>\u6a21\u677f\u5b9e\u53c2\u6240\u9700\u7684\u3002<\/p>\n\n\n\n<p>\u5bf9\u5e94\u7684\u9650\u57df<code>enum<\/code>\u7248\u672c\u5c31\u5f88\u5570\u55e6\u4e86\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enum class UserInfoFields { uiName, uiEmail, uiReputation };\n\nUserInfo uInfo;                         \/\/\u540c\u4e4b\u524d\u4e00\u6837\n\u2026\nauto val =\n    std::get&lt;static_cast&lt;std::size_t&gt;(UserInfoFields::uiEmail)&gt;\n        (uInfo);<\/code><\/pre>\n\n\n\n<p>\u4e3a\u907f\u514d\u8fd9\u79cd\u5197\u957f\u7684\u8868\u793a\uff0c\u6211\u4eec\u53ef\u4ee5\u5199\u4e00\u4e2a\u51fd\u6570\u4f20\u5165\u679a\u4e3e\u540d\u5e76\u8fd4\u56de\u5bf9\u5e94\u7684<code>std::size_t<\/code>\u503c\uff0c\u4f46\u8fd9\u6709\u4e00\u70b9\u6280\u5de7\u6027\u3002<code>std::get<\/code>\u662f\u4e00\u4e2a\u6a21\u677f\uff08\u51fd\u6570\uff09\uff0c\u9700\u8981\u4f60\u7ed9\u51fa\u4e00\u4e2a<code>std::size_t<\/code>\u503c\u7684\u6a21\u677f\u5b9e\u53c2\uff08\u6ce8\u610f\u4f7f\u7528<code>&lt;&gt;<\/code>\u800c\u4e0d\u662f<code>()<\/code>\uff09\uff0c\u56e0\u6b64\u5c06\u679a\u4e3e\u540d\u53d8\u6362\u4e3a<code>std::size_t<\/code>\u503c\u7684\u51fd\u6570\u5fc5\u987b<strong>\u5728\u7f16\u8bd1\u671f<\/strong>\u4ea7\u751f\u8fd9\u4e2a\u7ed3\u679c\u3002\u5982<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/3.MovingToModernCpp\/item15.md\" target=\"_blank\"  rel=\"nofollow\" >Item15<\/a>\u63d0\u5230\u7684\uff0c\u90a3\u5fc5\u987b\u662f\u4e00\u4e2a<code>constexpr<\/code>\u51fd\u6570\u3002<\/p>\n\n\n\n<p>\u4e8b\u5b9e\u4e0a\uff0c\u5b83\u4e5f\u7684\u786e\u8be5\u662f\u4e00\u4e2a<code>constexpr<\/code>\u51fd\u6570\u6a21\u677f\uff0c\u56e0\u4e3a\u5b83\u5e94\u8be5\u80fd\u7528\u4e8e\u4efb\u4f55<code>enum<\/code>\u3002\u5982\u679c\u6211\u4eec\u60f3\u8ba9\u5b83\u66f4\u4e00\u822c\u5316\uff0c\u6211\u4eec\u8fd8\u8981\u6cdb\u5316\u5b83\u7684\u8fd4\u56de\u7c7b\u578b\u3002\u8f83\u4e4b\u4e8e\u8fd4\u56de<code>std::size_t<\/code>\uff0c\u6211\u4eec\u66f4\u5e94\u8be5\u8fd4\u56de\u679a\u4e3e\u7684\u5e95\u5c42\u7c7b\u578b\u3002\u8fd9\u53ef\u4ee5\u901a\u8fc7<code>std::underlying_type<\/code>\u8fd9\u4e2a<em>type trait<\/em>\u83b7\u5f97\u3002\uff08\u53c2\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/3.MovingToModernCpp\/item9.md\" target=\"_blank\"  rel=\"nofollow\" >Item9<\/a>\u5173\u4e8e<em>type trait<\/em>\u7684\u5185\u5bb9\uff09\u3002\u6700\u7ec8\u6211\u4eec\u8fd8\u8981\u518d\u52a0\u4e0a<code>noexcept<\/code>\u4fee\u9970\uff08\u53c2\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/3.MovingToModernCpp\/item14.md\" target=\"_blank\"  rel=\"nofollow\" >Item14<\/a>\uff09\uff0c\u56e0\u4e3a\u6211\u4eec\u77e5\u9053\u5b83\u80af\u5b9a\u4e0d\u4f1a\u4ea7\u751f\u5f02\u5e38\u3002\u6839\u636e\u4e0a\u8ff0\u5206\u6790\u6700\u7ec8\u5f97\u5230\u7684<code>toUType<\/code>\u51fd\u6570\u6a21\u677f\u5728\u7f16\u8bd1\u671f\u63a5\u53d7\u4efb\u610f\u679a\u4e3e\u540d\u5e76\u8fd4\u56de\u5b83\u7684\u503c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename E&gt;\nconstexpr typename std::underlying_type&lt;E&gt;::type\n    toUType(E enumerator) noexcept\n{\n    return\n        static_cast&lt;typename\n                    std::underlying_type&lt;E&gt;::type&gt;(enumerator);\n}<\/code><\/pre>\n\n\n\n<p>\u5728C++14\u4e2d\uff0c<code>toUType<\/code>\u8fd8\u53ef\u4ee5\u8fdb\u4e00\u6b65\u7528<code>std::underlying_type_t<\/code>\uff08\u53c2\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/3.MovingToModernCpp\/item9.md\" target=\"_blank\"  rel=\"nofollow\" >Item9<\/a>\uff09\u4ee3\u66ff<code>typename std::underlying_type&lt;E&gt;::type<\/code>\u6253\u78e8\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename E&gt;                \/\/C++14\nconstexpr std::underlying_type_t&lt;E&gt;\n    toUType(E enumerator) noexcept\n{\n    return static_cast&lt;std::underlying_type_t&lt;E&gt;&gt;(enumerator);\n}<\/code><\/pre>\n\n\n\n<p>\u8fd8\u53ef\u4ee5\u518d\u7528C++14&nbsp;<code>auto<\/code>\uff08\u53c2\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/1.DeducingTypes\/item3.md\" target=\"_blank\"  rel=\"nofollow\" >Item3<\/a>\uff09\u6253\u78e8\u4e00\u4e0b\u4ee3\u7801\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename E&gt;                \/\/C++14\nconstexpr auto\n    toUType(E enumerator) noexcept\n{\n    return static_cast&lt;std::underlying_type_t&lt;E&gt;&gt;(enumerator);\n}<\/code><\/pre>\n\n\n\n<p>\u4e0d\u7ba1\u5b83\u600e\u4e48\u5199\uff0c<code>toUType<\/code>\u73b0\u5728\u5141\u8bb8\u8fd9\u6837\u8bbf\u95eetuple\u7684\u5b57\u6bb5\u4e86\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto val = std::get&lt;toUType(UserInfoFields::uiEmail)&gt;(uInfo);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e11\uff1a\u4f18\u5148\u8003\u8651\u4f7f\u7528<em>deleted<\/em>\u51fd\u6570\u800c\u975e\u4f7f\u7528\u672a\u5b9a\u4e49\u7684\u79c1\u6709\u58f0\u660e<\/h3>\n\n\n\n<p>\u5728C++98\u4e2d\u9632\u6b62\u8c03\u7528\u8fd9\u4e9b\u51fd\u6570\u7684\u65b9\u6cd5\u662f\u5c06\u5b83\u4eec\u58f0\u660e\u4e3a\u79c1\u6709\uff08<code>private<\/code>\uff09\u6210\u5458\u51fd\u6570\u5e76\u4e14\u4e0d\u5b9a\u4e49\u3002<\/p>\n\n\n\n<p>\u5c06\u5b83\u4eec\u58f0\u660e\u4e3a\u79c1\u6709\u6210\u5458\u53ef\u4ee5\u9632\u6b62\u5ba2\u6237\u7aef\u8c03\u7528\u8fd9\u4e9b\u51fd\u6570\u3002\u6545\u610f\u4e0d\u5b9a\u4e49\u5b83\u4eec\u610f\u5473\u7740\u5047\u5982\u8fd8\u662f\u6709\u4ee3\u7801\u7528\u5b83\u4eec\uff08\u6bd4\u5982\u6210\u5458\u51fd\u6570\u6216\u8005\u7c7b\u7684\u53cb\u5143<code>friend<\/code>\uff09\uff0c\u5c31\u4f1a\u5728\u94fe\u63a5\u65f6\u5f15\u53d1\u7f3a\u5c11\u51fd\u6570\u5b9a\u4e49\uff08<em>missing function definitions<\/em>\uff09\u9519\u8bef\u3002<\/p>\n\n\n\n<p>\u5728C++11\u4e2d\u6709\u4e00\u79cd\u66f4\u597d\u7684\u65b9\u5f0f\u8fbe\u5230\u76f8\u540c\u76ee\u7684\uff1a\u7528\u201c<code>= delete<\/code>\u201d\u5c06\u62f7\u8d1d\u6784\u9020\u51fd\u6570\u548c\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\u6807\u8bb0\u4e3a<strong><em>deleted<\/em>\u51fd\u6570<\/strong>\uff08\u8bd1\u6ce8\uff1a\u4e00\u4e9b\u6587\u732e\u7ffb\u8bd1\u4e3a\u201c\u5220\u9664\u7684\u51fd\u6570\u201d\uff09\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;\nclass basic_ios : public ios_base {\npublic:\n    \u2026\n\nprivate:\n    basic_ios(const basic_ios&amp; );           \/\/ not defined\n    basic_ios&amp; operator=(const basic_ios&amp;); \/\/ not defined\n};\ntemplate &lt;class charT, class traits = char_traits&lt;charT&gt; &gt;\nclass basic_ios : public ios_base {\npublic:\n    \u2026\n\n    basic_ios(const basic_ios&amp; ) = delete;\n    basic_ios&amp; operator=(const basic_ios&amp;) = delete;\n    \u2026\n};<\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u8981\u5c06\u8001\u4ee3\u7801\u7684\u201c\u79c1\u6709\u4e14\u672a\u5b9a\u4e49\u201d\u51fd\u6570\u66ff\u6362\u4e3a<em>deleted<\/em>\u51fd\u6570\u65f6\u8bf7\u4e00\u5e76\u4fee\u6539\u5b83\u7684\u8bbf\u95ee\u6027\u4e3a<code>public<\/code>\uff0c\u8fd9\u6837\u53ef\u4ee5\u8ba9\u7f16\u8bd1\u5668\u4ea7\u751f\u66f4\u597d\u7684\u9519\u8bef\u4fe1\u606f\u3002<\/p>\n\n\n\n<p><em>deleted<\/em>\u51fd\u6570\u8fd8\u6709\u4e00\u4e2a\u91cd\u8981\u7684\u4f18\u52bf\u662f<strong>\u4efb\u4f55<\/strong>\u51fd\u6570\u90fd\u53ef\u4ee5\u6807\u8bb0\u4e3a<em>deleted<\/em>\uff0c\u800c\u53ea\u6709\u6210\u5458\u51fd\u6570\u53ef\u88ab\u6807\u8bb0\u4e3a<code>private<\/code>\u3002\uff08\u8bd1\u6ce8\uff1a\u4ece\u4e0b\u6587\u53ef\u77e5\u201c\u4efb\u4f55\u201d\u662f\u5305\u542b\u666e\u901a\u51fd\u6570\u548c\u6210\u5458\u51fd\u6570\u7b49\u6240\u6709\u53ef\u58f0\u660e\u51fd\u6570\u7684\u5730\u65b9\uff0c\u800c<code>private<\/code>\u65b9\u6cd5\u53ea\u9002\u7528\u4e8e\u6210\u5458\u51fd\u6570\uff09\u5047\u5982\u6211\u4eec\u6709\u4e00\u4e2a\u975e\u6210\u5458\u51fd\u6570\uff0c\u5b83\u63a5\u53d7\u4e00\u4e2a\u6574\u578b\u53c2\u6570\uff0c\u68c0\u67e5\u5b83\u662f\u5426\u4e3a\u5e78\u8fd0\u6570\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bool isLucky(int number);<\/code><\/pre>\n\n\n\n<p>C++\u6709\u6c89\u91cd\u7684C\u5305\u88b1\uff0c\u4f7f\u5f97\u542b\u7cca\u7684\u3001\u80fd\u88ab\u89c6\u4f5c\u6570\u503c\u7684\u4efb\u4f55\u7c7b\u578b\u90fd\u80fd\u9690\u5f0f\u8f6c\u6362\u4e3a<code>int<\/code>\uff0c\u4f46\u662f\u6709\u4e00\u4e9b\u8c03\u7528\u53ef\u80fd\u662f\u6ca1\u6709\u610f\u4e49\u7684\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (isLucky('a')) \u2026         \/\/\u5b57\u7b26'a'\u662f\u5e78\u8fd0\u6570\uff1f\nif (isLucky(true)) \u2026        \/\/\"true\"\u662f?\nif (isLucky(3.5)) \u2026         \/\/\u96be\u9053\u5224\u65ad\u5b83\u7684\u5e78\u8fd0\u4e4b\u524d\u8fd8\u8981\u5148\u622a\u5c3e\u62103\uff1f<\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u5e78\u8fd0\u6570\u5fc5\u987b\u771f\u7684\u662f\u6574\u578b\uff0c\u6211\u4eec\u8be5\u7981\u6b62\u8fd9\u4e9b\u8c03\u7528\u901a\u8fc7\u7f16\u8bd1\u3002<\/p>\n\n\n\n<p>\u5176\u4e2d\u4e00\u79cd\u65b9\u6cd5\u5c31\u662f\u521b\u5efa<em>deleted<\/em>\u91cd\u8f7d\u51fd\u6570\uff0c\u5176\u53c2\u6570\u5c31\u662f\u6211\u4eec\u60f3\u8981\u8fc7\u6ee4\u7684\u7c7b\u578b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bool isLucky(int number);       \/\/\u539f\u59cb\u7248\u672c\nbool isLucky(char) = delete;    \/\/\u62d2\u7eddchar\nbool isLucky(bool) = delete;    \/\/\u62d2\u7eddbool\nbool isLucky(double) = delete;  \/\/\u62d2\u7eddfloat\u548cdouble<\/code><\/pre>\n\n\n\n<p>\u53e6\u4e00\u4e2a<em>deleted<\/em>\u51fd\u6570\u7528\u6b66\u4e4b\u5730\uff08<code>private<\/code>\u6210\u5458\u51fd\u6570\u505a\u4e0d\u5230\u7684\u5730\u65b9\uff09\u662f\u7981\u6b62\u4e00\u4e9b\u6a21\u677f\u7684\u5b9e\u4f8b\u5316\u3002\u5047\u5982\u4f60\u8981\u6c42\u4e00\u4e2a\u6a21\u677f\u4ec5\u652f\u6301\u539f\u751f\u6307\u9488\uff08\u5c3d\u7ba1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/4.SmartPointers\/item18.md\" target=\"_blank\"  rel=\"nofollow\" >\u7b2c\u56db\u7ae0<\/a>\u5efa\u8bae\u4f7f\u7528\u667a\u80fd\u6307\u9488\u4ee3\u66ff\u539f\u751f\u6307\u9488\uff09\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;typename T&gt;\nvoid processPointer(T* ptr);<\/code><\/pre>\n\n\n\n<p>\u5728\u6307\u9488\u7684\u4e16\u754c\u91cc\u6709\u4e24\u79cd\u7279\u6b8a\u60c5\u51b5\u3002\u4e00\u662f<code>void*<\/code>\u6307\u9488\uff0c\u56e0\u4e3a\u6ca1\u529e\u6cd5\u5bf9\u5b83\u4eec\u8fdb\u884c\u89e3\u5f15\u7528\uff0c\u6216\u8005\u52a0\u52a0\u51cf\u51cf\u7b49\u3002\u53e6\u4e00\u79cd\u6307\u9488\u662f<code>char*<\/code>\uff0c\u56e0\u4e3a\u5b83\u4eec\u901a\u5e38\u4ee3\u8868C\u98ce\u683c\u7684\u5b57\u7b26\u4e32\uff0c\u800c\u4e0d\u662f\u6b63\u5e38\u610f\u4e49\u4e0b\u6307\u5411\u5355\u4e2a\u5b57\u7b26\u7684\u6307\u9488\u3002\u8fd9\u4e24\u79cd\u60c5\u51b5\u8981\u7279\u6b8a\u5904\u7406\uff0c\u5728<code>processPointer<\/code>\u6a21\u677f\u91cc\u9762\uff0c\u6211\u4eec\u5047\u8bbe\u6b63\u786e\u7684\u51fd\u6570\u5e94\u8be5\u62d2\u7edd\u8fd9\u4e9b\u7c7b\u578b\u3002\u4e5f\u5373\u662f\u8bf4\uff0c<code>processPointer<\/code>\u4e0d\u80fd\u88ab<code>void*<\/code>\u548c<code>char*<\/code>\u8c03\u7528\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;&gt;\nvoid processPointer&lt;void&gt;(void*) = delete;\n\ntemplate&lt;&gt;\nvoid processPointer&lt;char&gt;(char*) = delete;<\/code><\/pre>\n\n\n\n<p>\u73b0\u5728\u5982\u679c\u4f7f\u7528<code>void*<\/code>\u548c<code>char*<\/code>\u8c03\u7528<code>processPointer<\/code>\u5c31\u662f\u65e0\u6548\u7684\uff0c\u6309\u5e38\u7406\u8bf4<code>const void*<\/code>\u548c<code>const char*<\/code>\u4e5f\u5e94\u8be5\u65e0\u6548\uff0c\u6240\u4ee5\u8fd9\u4e9b\u5b9e\u4f8b\u4e5f\u5e94\u8be5\u6807\u6ce8<code>delete<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>template&lt;&gt;\nvoid processPointer&lt;const void&gt;(const void*) = delete;\n\ntemplate&lt;&gt;\nvoid processPointer&lt;const char&gt;(const char*) = delete;<\/code><\/pre>\n\n\n\n<p>\u5982\u679c\u4f60\u60f3\u505a\u5f97\u66f4\u5f7b\u5e95\u4e00\u4e9b\uff0c\u4f60\u8fd8\u8981\u5220\u9664<code>const volatile void*<\/code>\u548c<code>const volatile char*<\/code>\u91cd\u8f7d\u7248\u672c\uff0c\u53e6\u5916\u8fd8\u9700\u8981\u4e00\u5e76\u5220\u9664\u5176\u4ed6\u6807\u51c6\u5b57\u7b26\u7c7b\u578b\u7684\u91cd\u8f7d\u7248\u672c\uff1a<code>std::wchar_t<\/code>\uff0c<code>std::char16_t<\/code>\u548c<code>std::char32_t<\/code>\u3002<\/p>\n\n\n\n<p>\u6709\u8da3\u7684\u662f\uff0c\u5982\u679c\u7c7b\u91cc\u9762\u6709\u4e00\u4e2a\u51fd\u6570\u6a21\u677f\uff0c\u4f60\u53ef\u80fd\u60f3\u7528<code>private<\/code>\uff08\u7ecf\u5178\u7684C++98\u60ef\u4f8b\uff09\u6765\u7981\u6b62\u8fd9\u4e9b\u51fd\u6570\u6a21\u677f\u5b9e\u4f8b\u5316\uff0c\u4f46\u662f\u4e0d\u80fd\u8fd9\u6837\u505a\uff0c\u56e0\u4e3a\u4e0d\u80fd\u7ed9\u7279\u5316\u7684\u6210\u5458\u6a21\u677f\u51fd\u6570\u6307\u5b9a\u4e00\u4e2a\u4e0d\u540c\u4e8e\u4e3b\u51fd\u6570\u6a21\u677f\u7684\u8bbf\u95ee\u7ea7\u522b\u3002\u5982\u679c<code>processPointer<\/code>\u662f\u7c7b<code>Widget<\/code>\u91cc\u9762\u7684\u6a21\u677f\u51fd\u6570\uff0c \u4f60\u60f3\u7981\u6b62\u5b83\u63a5\u53d7<code>void*<\/code>\u53c2\u6570\uff0c\u90a3\u4e48\u901a\u8fc7\u4e0b\u9762\u8fd9\u6837C++98\u7684\u65b9\u6cd5\u5c31\u4e0d\u80fd\u901a\u8fc7\u7f16\u8bd1\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Widget {\npublic:\n    \u2026\n    template&lt;typename T&gt;\n    void processPointer(T* ptr)\n    { \u2026 }\n\nprivate:\n    template&lt;&gt;                          \/\/\u9519\u8bef\uff01\n    void processPointer&lt;void&gt;(void*);\n    \n};<\/code><\/pre>\n\n\n\n<p>\u95ee\u9898\u662f\u6a21\u677f\u7279\u4f8b\u5316\u5fc5\u987b\u4f4d\u4e8e\u4e00\u4e2a\u547d\u540d\u7a7a\u95f4\u4f5c\u7528\u57df\uff0c\u800c\u4e0d\u662f\u7c7b\u4f5c\u7528\u57df\u3002<em>deleted<\/em>\u51fd\u6570\u4e0d\u4f1a\u51fa\u73b0\u8fd9\u4e2a\u95ee\u9898\uff0c\u56e0\u4e3a\u5b83\u4e0d\u9700\u8981\u4e00\u4e2a\u4e0d\u540c\u7684\u8bbf\u95ee\u7ea7\u522b\uff0c\u4e14\u4ed6\u4eec\u53ef\u4ee5\u5728\u7c7b\u5916\u88ab\u5220\u9664\uff08\u56e0\u6b64\u4f4d\u4e8e\u547d\u540d\u7a7a\u95f4\u4f5c\u7528\u57df\uff09\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Widget {\npublic:\n    \u2026\n    template&lt;typename T&gt;\n    void processPointer(T* ptr)\n    { \u2026 }\n    \u2026\n\n};\n\ntemplate&lt;&gt;                                          \/\/\u8fd8\u662fpublic\uff0c\nvoid Widget::processPointer&lt;void&gt;(void*) = delete;  \/\/\u4f46\u662f\u5df2\u7ecf\u88ab\u5220\u9664\u4e86<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e13\uff1a\u4f7f\u7528override\u58f0\u660e\u91cd\u5199\u51fd\u6570<\/h3>\n\n\n\n<p>\u5728C++\u9762\u5411\u5bf9\u8c61\u7684\u4e16\u754c\u91cc\uff0c\u6d89\u53ca\u7684\u6982\u5ff5\u6709\u7c7b\uff0c\u7ee7\u627f\uff0c\u865a\u51fd\u6570\u3002\u8fd9\u4e2a\u4e16\u754c\u6700\u57fa\u672c\u7684\u6982\u5ff5\u662f\u6d3e\u751f\u7c7b\u7684\u865a\u51fd\u6570<strong>\u91cd\u5199<\/strong>\u57fa\u7c7b\u540c\u540d\u51fd\u6570\u3002\u4ee4\u4eba\u9057\u61be\u7684\u662f\u865a\u51fd\u6570\u91cd\u5199\u53ef\u80fd\u4e00\u4e0d\u5c0f\u5fc3\u5c31\u9519\u4e86\u3002\u4f3c\u4e4e\u8fd9\u90e8\u5206\u8bed\u8a00\u7684\u8bbe\u8ba1\u7406\u5ff5\u662f\u4e0d\u4ec5\u4ec5\u8981\u9075\u5b88\u58a8\u83f2\u5b9a\u5f8b\uff0c\u8fd8\u5e94\u8be5\u5c0a\u91cd\u5b83\u3002<\/p>\n\n\n\n<p>\u867d\u7136\u201c\u91cd\u5199\uff08<em>overriding<\/em>\uff09\u201d\u542c\u8d77\u6765\u50cf\u201c\u91cd\u8f7d\uff08<em>overloading<\/em>\uff09\u201d\uff0c\u7136\u800c\u4e24\u8005\u5b8c\u5168\u4e0d\u76f8\u5173\uff0c\u6240\u4ee5\u8ba9\u6211\u6f84\u6e05\u4e00\u4e0b\uff0c\u6b63\u662f\u865a\u51fd\u6570\u91cd\u5199\u673a\u5236\u7684\u5b58\u5728\uff0c\u624d\u4f7f\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u57fa\u7c7b\u7684\u63a5\u53e3\u8c03\u7528\u6d3e\u751f\u7c7b\u7684\u6210\u5458\u51fd\u6570\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Base {\npublic:\n    virtual void doWork();          \/\/\u57fa\u7c7b\u865a\u51fd\u6570\n    \u2026\n};\n\nclass Derived: public Base {\npublic:\n    virtual void doWork();          \/\/\u91cd\u5199Base::doWork\n    \u2026                               \/\/\uff08\u8fd9\u91cc\u201cvirtual\u201d\u662f\u53ef\u4ee5\u7701\u7565\u7684\uff09\n}; \n\nstd::unique_ptr&lt;Base&gt; upb =         \/\/\u521b\u5efa\u57fa\u7c7b\u6307\u9488\u6307\u5411\u6d3e\u751f\u7c7b\u5bf9\u8c61\n    std::make_unique&lt;Derived&gt;();    \/\/\u5173\u4e8estd::make_unique\n\u2026                                   \/\/\u8bf7\u53c2\u89c1Item21\n\n    \nupb-&gt;doWork();                      \/\/\u901a\u8fc7\u57fa\u7c7b\u6307\u9488\u8c03\u7528doWork\uff0c\n                                    \/\/\u5b9e\u9645\u4e0a\u662f\u6d3e\u751f\u7c7b\u7684doWork\n                                    \/\/\u51fd\u6570\u88ab\u8c03\u7528<\/code><\/pre>\n\n\n\n<p>\u8981\u60f3\u91cd\u5199\u4e00\u4e2a\u51fd\u6570\uff0c\u5fc5\u987b\u6ee1\u8db3\u4e0b\u5217\u8981\u6c42\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u57fa\u7c7b\u51fd\u6570\u5fc5\u987b\u662f<code>virtual<\/code><\/li>\n\n\n\n<li>\u57fa\u7c7b\u548c\u6d3e\u751f\u7c7b\u51fd\u6570\u540d\u5fc5\u987b\u5b8c\u5168\u4e00\u6837\uff08\u9664\u975e\u662f\u6790\u6784\u51fd\u6570)<\/li>\n\n\n\n<li>\u57fa\u7c7b\u548c\u6d3e\u751f\u7c7b\u51fd\u6570\u5f62\u53c2\u7c7b\u578b\u5fc5\u987b\u5b8c\u5168\u4e00\u6837<\/li>\n\n\n\n<li>\u57fa\u7c7b\u548c\u6d3e\u751f\u7c7b\u51fd\u6570\u5e38\u91cf\u6027<code>constness<\/code>\u5fc5\u987b\u5b8c\u5168\u4e00\u6837<\/li>\n\n\n\n<li>\u57fa\u7c7b\u548c\u6d3e\u751f\u7c7b\u51fd\u6570\u7684\u8fd4\u56de\u503c\u548c\u5f02\u5e38\u8bf4\u660e\uff08<em>exception specifications<\/em>\uff09\u5fc5\u987b\u517c\u5bb9<\/li>\n<\/ul>\n\n\n\n<p>\u9664\u4e86\u8fd9\u4e9bC++98\u5c31\u5b58\u5728\u7684\u7ea6\u675f\u5916\uff0cC++11\u53c8\u6dfb\u52a0\u4e86\u4e00\u4e2a\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u51fd\u6570\u7684\u5f15\u7528\u9650\u5b9a\u7b26\uff08<em>reference qualifiers<\/em>\uff09\u5fc5\u987b\u5b8c\u5168\u4e00\u6837\u3002\u6210\u5458\u51fd\u6570\u7684\u5f15\u7528\u9650\u5b9a\u7b26\u662fC++11\u5f88\u5c11\u629b\u5934\u9732\u8138\u7684\u7279\u6027\uff0c\u6240\u4ee5\u5982\u679c\u4f60\u4ece\u6ca1\u542c\u8fc7\u5b83\u65e0\u9700\u60ca\u8bb6\u3002\u5b83\u53ef\u4ee5\u9650\u5b9a\u6210\u5458\u51fd\u6570\u53ea\u80fd\u7528\u4e8e\u5de6\u503c\u6216\u8005\u53f3\u503c\u3002\u6210\u5458\u51fd\u6570\u4e0d\u9700\u8981<code>virtual<\/code>\u4e5f\u80fd\u4f7f\u7528\u5b83\u4eec\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>class Widget {\npublic:\n    \u2026\n    void doWork() &amp;;    \/\/\u53ea\u6709*this\u4e3a\u5de6\u503c\u7684\u65f6\u5019\u624d\u80fd\u88ab\u8c03\u7528\n    void doWork() &amp;&amp;;   \/\/\u53ea\u6709*this\u4e3a\u53f3\u503c\u7684\u65f6\u5019\u624d\u80fd\u88ab\u8c03\u7528\n}; \n\u2026\nWidget makeWidget();    \/\/\u5de5\u5382\u51fd\u6570\uff08\u8fd4\u56de\u53f3\u503c\uff09\nWidget w;               \/\/\u666e\u901a\u5bf9\u8c61\uff08\u5de6\u503c\uff09\n\u2026\nw.doWork();             \/\/\u8c03\u7528\u88ab\u5de6\u503c\u5f15\u7528\u9650\u5b9a\u4fee\u9970\u7684Widget::doWork\u7248\u672c\n                        \/\/\uff08\u5373Widget::doWork &amp;\uff09\nmakeWidget().doWork();  \/\/\u8c03\u7528\u88ab\u53f3\u503c\u5f15\u7528\u9650\u5b9a\u4fee\u9970\u7684Widget::doWork\u7248\u672c\n                        \/\/\uff08\u5373Widget::doWork &amp;&amp;\uff09<\/code><\/pre>\n\n\n\n<p>\u6bd4\u8d77\u8ba9\u7f16\u8bd1\u5668\uff08\u8bd1\u6ce8\uff1a\u901a\u8fc7warnings\uff09\u544a\u8bc9\u4f60\u60f3\u91cd\u5199\u7684\u800c\u5b9e\u9645\u6ca1\u6709\u91cd\u5199\uff0c\u4e0d\u5982\u7ed9\u4f60\u7684\u6d3e\u751f\u7c7b\u91cd\u5199\u51fd\u6570\u5168\u90fd\u52a0\u4e0a<code>override<\/code>\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e13\uff1a\u4f18\u5148\u8003\u8651<code>const_iterator<\/code>\u800c\u975e<code>iterator<\/code><\/h3>\n\n\n\n<p>STL&nbsp;<code>const_iterator<\/code>\u7b49\u4ef7\u4e8e\u6307\u5411\u5e38\u91cf\u7684\u6307\u9488\uff08pointer-to-<code>const<\/code>\uff09\u3002\u5b83\u4eec\u90fd\u6307\u5411\u4e0d\u80fd\u88ab\u4fee\u6539\u7684\u503c\u3002\u6807\u51c6\u5b9e\u8df5\u662f\u80fd\u52a0\u4e0a<code>const<\/code>\u5c31\u52a0\u4e0a\uff0c\u8fd9\u4e5f\u6307\u793a\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u8fed\u4ee3\u5668\u65f6\u53ea\u8981\u6ca1\u5fc5\u8981\u4fee\u6539\u8fed\u4ee3\u5668\u6307\u5411\u7684\u503c\uff0c\u5c31\u5e94\u5f53\u4f7f\u7528<code>const_iterator<\/code>\u3002<\/p>\n\n\n\n<p>\u4e0a\u9762\u7684\u8bf4\u6cd5\u5bf9C++11\u548cC++98\u90fd\u662f\u6b63\u786e\u7684\uff0c\u4f46\u662f\u5728C++98\u4e2d\uff0c\u6807\u51c6\u5e93\u5bf9<code>const_iterator<\/code>\u7684\u652f\u6301\u4e0d\u662f\u5f88\u5b8c\u6574\u3002\u9996\u5148\u4e0d\u5bb9\u6613\u521b\u5efa\u5b83\u4eec\uff0c\u5176\u6b21\u5c31\u7b97\u4f60\u6709\u4e86\u5b83\uff0c\u5b83\u7684\u4f7f\u7528\u4e5f\u662f\u53d7\u9650\u7684\u3002\u5047\u5982\u4f60\u60f3\u5728<code>std::vector&lt;int&gt;<\/code>\u4e2d\u67e5\u627e\u7b2c\u4e00\u6b21\u51fa\u73b01983\uff08C++\u4ee3\u66ffC with classes\u7684\u90a3\u4e00\u5e74\uff09\u7684\u4f4d\u7f6e\uff0c\u7136\u540e\u63d2\u51651998\uff08\u7b2c\u4e00\u4e2aISO C++\u6807\u51c6\u88ab\u63a5\u7eb3\u7684\u90a3\u4e00\u5e74\uff09\u3002\u5982\u679c<em>vector<\/em>\u4e2d\u6ca1\u67091983\uff0c\u90a3\u4e48\u5c31\u5728<em>vector<\/em>\u5c3e\u90e8\u63d2\u5165\u3002\u5728C++98\u4e2d\u4f7f\u7528<code>iterator<\/code>\u53ef\u4ee5\u5f88\u5bb9\u6613\u505a\u5230\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::vector&lt;int&gt; values;\n\u2026\nstd::vector&lt;int&gt;::iterator it =\n    std::find(values.begin(), values.end(), 1983);\nvalues.insert(it, 1998);<\/code><\/pre>\n\n\n\n<p>C++11\u4e2d\uff0c\u73b0\u5728<code>const_iterator<\/code>\u65e2\u5bb9\u6613\u83b7\u53d6\u53c8\u5bb9\u6613\u4f7f\u7528\u3002\u5bb9\u5668\u7684\u6210\u5458\u51fd\u6570<code>cbegin<\/code>\u548c<code>cend<\/code>\u4ea7\u51fa<code>const_iterator<\/code>\uff0c\u751a\u81f3\u5bf9\u4e8enon-<code>const<\/code>\u5bb9\u5668\u4e5f\u53ef\u7528\uff0c\u90a3\u4e9b\u4e4b\u524d\u4f7f\u7528<em>iterator<\/em>\u6307\u793a\u4f4d\u7f6e\uff08\u5982<code>insert<\/code>\u548c<code>erase<\/code>\uff09\u7684STL\u6210\u5458\u51fd\u6570\u4e5f\u53ef\u4ee5\u4f7f\u7528<code>const_iterator<\/code>\u4e86\u3002\u4f7f\u7528C++11&nbsp;<code>const_iterator<\/code>\u91cd\u5199C++98\u4f7f\u7528<code>iterator<\/code>\u7684\u4ee3\u7801\u4e5f\u7a00\u677e\u5e73\u5e38\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::vector&lt;int&gt; values;                                \/\/\u548c\u4e4b\u524d\u4e00\u6837\n\u2026\nauto it =                                               \/\/\u4f7f\u7528cbegin\n\tstd::find(values.cbegin(), values.cend(), 1983);\/\/\u548ccend\nvalues.insert(it, 1998);<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e14\uff1a\u5982\u679c\u51fd\u6570\u4e0d\u629b\u51fa\u5f02\u5e38\u8bf7\u4f7f\u7528<code>noexcept<\/code><\/h3>\n\n\n\n<p>\u5728C++11\u4e2d\uff0c\u65e0\u6761\u4ef6\u7684<code>noexcept<\/code>\u4fdd\u8bc1\u51fd\u6570\u4e0d\u4f1a\u629b\u51fa\u4efb\u4f55\u5f02\u5e38\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e15\uff1a\u5c3d\u53ef\u80fd\u7684\u4f7f\u7528<code>constexpr<\/code><\/h3>\n\n\n\n<p>\u5982\u679c\u8981\u7ed9C++11\u9881\u4e00\u4e2a\u201c\u6700\u4ee4\u4eba\u56f0\u60d1\u65b0\u8bcd\u201d\u5956\uff0c<code>constexpr<\/code>\u5341\u6709\u516b\u4e5d\u4f1a\u6298\u6842\u3002\u5f53\u7528\u4e8e\u5bf9\u8c61\u4e0a\u9762\uff0c\u5b83\u672c\u8d28\u4e0a\u5c31\u662f<code>const<\/code>\u7684\u52a0\u5f3a\u5f62\u5f0f\uff0c\u4f46\u662f\u5f53\u5b83\u7528\u4e8e\u51fd\u6570\u4e0a\uff0c\u610f\u601d\u5c31\u5927\u4e0d\u76f8\u540c\u4e86\u3002\u6709\u5fc5\u8981\u6d88\u9664\u56f0\u60d1\uff0c\u56e0\u4e3a\u4f60\u7edd\u5bf9\u4f1a\u7528\u5b83\u7684\uff0c\u7279\u522b\u662f\u5f53\u4f60\u53d1\u73b0<code>constexpr<\/code>&nbsp;\u201c\u6b63\u5408\u543e\u610f\u201d\u7684\u65f6\u5019\u3002<\/p>\n\n\n\n<p>\u4ece\u6982\u5ff5\u4e0a\u6765\u8bf4\uff0c<code>constexpr<\/code>\u8868\u660e\u4e00\u4e2a\u503c\u4e0d\u4ec5\u4ec5\u662f\u5e38\u91cf\uff0c\u8fd8\u662f\u7f16\u8bd1\u671f\u53ef\u77e5\u7684\u3002\u8fd9\u4e2a\u8868\u8ff0\u5e76\u4e0d\u5168\u9762\uff0c\u56e0\u4e3a\u5f53<code>constexpr<\/code>\u88ab\u7528\u4e8e\u51fd\u6570\u7684\u65f6\u5019\uff0c\u4e8b\u60c5\u5c31\u6709\u4e00\u4e9b\u7ec6\u5fae\u5dee\u522b\u4e86\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e16\uff1a\u8ba9<code>const<\/code>\u6210\u5458\u51fd\u6570\u7ebf\u7a0b\u5b89\u5168<\/h3>\n\n\n\n<p>\u5982\u679c\u6211\u4eec\u5728\u6570\u5b66\u9886\u57df\u4e2d\u5de5\u4f5c\uff0c\u6211\u4eec\u5c31\u4f1a\u53d1\u73b0\u7528\u4e00\u4e2a\u7c7b\u8868\u793a\u591a\u9879\u5f0f\u662f\u5f88\u65b9\u4fbf\u7684\u3002\u5728\u8fd9\u4e2a\u7c7b\u4e2d\uff0c\u4f7f\u7528\u4e00\u4e2a\u51fd\u6570\u6765\u8ba1\u7b97\u591a\u9879\u5f0f\u7684\u6839\u662f\u5f88\u6709\u7528\u7684\uff0c\u4e5f\u5c31\u662f\u591a\u9879\u5f0f\u7684\u503c\u4e3a\u96f6\u7684\u65f6\u5019\uff08\u8bd1\u8005\u6ce8\uff1a\u901a\u5e38\u4e5f\u88ab\u53eb\u505a\u96f6\u70b9\uff0c\u5373\u4f7f\u5f97\u591a\u9879\u5f0f\u503c\u4e3a\u96f6\u7684\u90a3\u4e9b\u53d6\u503c\uff09\u3002\u8fd9\u6837\u7684\u4e00\u4e2a\u51fd\u6570\u5b83\u4e0d\u4f1a\u66f4\u6539\u591a\u9879\u5f0f\u3002\u6240\u4ee5\uff0c\u5b83\u81ea\u7136\u88ab\u58f0\u660e\u4e3a<code>const<\/code>\u51fd\u6570\u3002<\/p>\n\n\n\n<p>\u8ba1\u7b97\u591a\u9879\u5f0f\u7684\u6839\u662f\u5f88\u590d\u6742\u7684\uff0c\u56e0\u6b64\u5982\u679c\u4e0d\u9700\u8981\u7684\u8bdd\uff0c\u6211\u4eec\u5c31\u4e0d\u505a\u3002\u5982\u679c\u5fc5\u987b\u505a\uff0c\u6211\u4eec\u80af\u5b9a\u4e0d\u60f3\u518d\u505a\u7b2c\u4e8c\u6b21\u3002\u6240\u4ee5\uff0c\u5982\u679c\u5fc5\u987b\u8ba1\u7b97\u5b83\u4eec\uff0c\u5c31\u7f13\u5b58\u591a\u9879\u5f0f\u7684\u6839\uff0c\u7136\u540e\u5b9e\u73b0<code>roots<\/code>\u6765\u8fd4\u56de\u7f13\u5b58\u7684\u503c\u3002\u4e0b\u9762\u662f\u6700\u57fa\u672c\u7684\u5b9e\u73b0\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Polynomial {\npublic:\n    using RootsType = std::vector&lt;double&gt;;\n    \n    RootsType roots() const\n    {\n        if (!rootsAreValid) {               \/\/\u5982\u679c\u7f13\u5b58\u4e0d\u53ef\u7528\n            \u2026                               \/\/\u8ba1\u7b97\u6839\n                                            \/\/\u7528rootVals\u5b58\u50a8\u5b83\u4eec\n            rootsAreValid = true;\n        }\n        \n        return rootVals;\n    }\n    \nprivate:\n    mutable bool rootsAreValid{ false };    \/\/\u521d\u59cb\u5316\u5668\uff08initializer\uff09\u7684\n    mutable RootsType rootVals{};           \/\/\u66f4\u591a\u4fe1\u606f\u8bf7\u67e5\u770b\u6761\u6b3e7\n};<\/code><\/pre>\n\n\n\n<p>\u4ece\u6982\u5ff5\u4e0a\u8bb2\uff0c<code>roots<\/code>\u5e76\u4e0d\u6539\u53d8\u5b83\u6240\u64cd\u4f5c\u7684<code>Polynomial<\/code>\u5bf9\u8c61\u3002\u4f46\u662f\u4f5c\u4e3a\u7f13\u5b58\u7684\u4e00\u90e8\u5206\uff0c\u5b83\u4e5f\u8bb8\u4f1a\u6539\u53d8<code>rootVals<\/code>\u548c<code>rootsAreValid<\/code>\u7684\u503c\u3002\u8fd9\u5c31\u662f<code>mutable<\/code>\u7684\u7ecf\u5178\u4f7f\u7528\u6837\u4f8b\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48\u5b83\u662f\u6570\u636e\u6210\u5458\u58f0\u660e\u7684\u4e00\u90e8\u5206\u3002<\/p>\n\n\n\n<p>\u5047\u8bbe\u73b0\u5728\u6709\u4e24\u4e2a\u7ebf\u7a0b\u540c\u65f6\u8c03\u7528<code>Polynomial<\/code>\u5bf9\u8c61\u7684<code>roots<\/code>\u65b9\u6cd5\u3002<code>roots<\/code>\u662f<code>const<\/code>\u6210\u5458\u51fd\u6570\uff0c\u90a3\u5c31\u8868\u793a\u7740\u5b83\u662f\u4e00\u4e2a\u8bfb\u64cd\u4f5c\u3002\u5728\u6ca1\u6709\u540c\u6b65\u7684\u60c5\u51b5\u4e0b\uff0c\u8ba9\u591a\u4e2a\u7ebf\u7a0b\u6267\u884c\u8bfb\u64cd\u4f5c\u662f\u5b89\u5168\u7684\u3002\u5b83\u6700\u8d77\u7801\u5e94\u8be5\u505a\u5230\u8fd9\u70b9\u3002\u5728\u672c\u4f8b\u4e2d\u5374\u6ca1\u6709\u505a\u5230\u7ebf\u7a0b\u5b89\u5168\u3002\u56e0\u4e3a\u5728<code>roots<\/code>\u4e2d\uff0c\u8fd9\u4e9b\u7ebf\u7a0b\u4e2d\u7684\u4e00\u4e2a\u6216\u4e24\u4e2a\u53ef\u80fd\u5c1d\u8bd5\u4fee\u6539\u6210\u5458\u53d8\u91cf<code>rootsAreValid<\/code>\u548c<code>rootVals<\/code>\u3002\u8fd9\u5c31\u610f\u5473\u7740\u5728\u6ca1\u6709\u540c\u6b65\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u4e9b\u4ee3\u7801\u4f1a\u6709\u4e0d\u540c\u7684\u7ebf\u7a0b\u8bfb\u5199\u76f8\u540c\u7684\u5185\u5b58\uff0c\u8fd9\u5c31\u662f\u6570\u636e\u7ade\u4e89\uff08<em>data race<\/em>\uff09\u7684\u5b9a\u4e49\u3002\u8fd9\u6bb5\u4ee3\u7801\u7684\u884c\u4e3a\u662f\u672a\u5b9a\u4e49\u7684\u3002<\/p>\n\n\n\n<p>\u95ee\u9898\u5c31\u662f<code>roots<\/code>\u88ab\u58f0\u660e\u4e3a<code>const<\/code>\uff0c\u4f46\u4e0d\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\u3002<code>const<\/code>\u58f0\u660e\u5728C++11\u4e2d\u4e0e\u5728C++98\u4e2d\u4e00\u6837\u6b63\u786e\uff08\u68c0\u7d22\u591a\u9879\u5f0f\u7684\u6839\u5e76\u4e0d\u4f1a\u66f4\u6539\u591a\u9879\u5f0f\u7684\u503c\uff09\uff0c\u56e0\u6b64\u9700\u8981\u7ea0\u6b63\u7684\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\u7f3a\u4e4f\u3002<\/p>\n\n\n\n<p>\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u6700\u666e\u904d\u7b80\u5355\u7684\u65b9\u6cd5\u5c31\u662f\u2014\u2014\u4f7f\u7528<code>mutex<\/code>\uff08\u4e92\u65a5\u91cf\uff09\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Polynomial {\npublic:\n    using RootsType = std::vector&lt;double&gt;;\n    \n    RootsType roots() const\n    {\n        std::lock_guard&lt;std::mutex&gt; g(m);       \/\/\u9501\u5b9a\u4e92\u65a5\u91cf\n        \n        if (!rootsAreValid) {                   \/\/\u5982\u679c\u7f13\u5b58\u65e0\u6548\n            \u2026                                   \/\/\u8ba1\u7b97\/\u5b58\u50a8\u6839\u503c\n            rootsAreValid = true;\n        }\n        \n        return rootsVals;\n    }                                           \/\/\u89e3\u9501\u4e92\u65a5\u91cf\n    \nprivate:\n    mutable std::mutex m;\n    mutable bool rootsAreValid { false };\n    mutable RootsType rootsVals {};\n};<\/code><\/pre>\n\n\n\n<p>\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\uff0c\u4e92\u65a5\u91cf\u7684\u526f\u4f5c\u7528\u663e\u4f1a\u5f97\u8fc7\u5927\u3002\u4f8b\u5982\uff0c\u5982\u679c\u4f60\u6240\u505a\u7684\u53ea\u662f\u8ba1\u7b97\u6210\u5458\u51fd\u6570\u88ab\u8c03\u7528\u4e86\u591a\u5c11\u6b21\uff0c\u4f7f\u7528<code>std::atomic<\/code>&nbsp;\u4fee\u9970\u7684\u8ba1\u6570\u5668\uff08\u4fdd\u8bc1\u5176\u4ed6\u7ebf\u7a0b\u89c6\u5b83\u7684\u64cd\u4f5c\u4e3a\u4e0d\u53ef\u5206\u5272\u7684\u6574\u4f53\uff0c\u53c2\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/7.TheConcurrencyAPI\/item40.md\" target=\"_blank\"  rel=\"nofollow\" >item40<\/a>\uff09\u901a\u5e38\u4f1a\u662f\u4e00\u4e2a\u5f00\u9500\u66f4\u5c0f\u7684\u65b9\u6cd5\u3002\uff08\u7136\u800c\u5b83\u662f\u5426\u8f7b\u91cf\u53d6\u51b3\u4e8e\u4f60\u4f7f\u7528\u7684\u786c\u4ef6\u548c\u6807\u51c6\u5e93\u4e2d\u4e92\u65a5\u91cf\u7684\u5b9e\u73b0\u3002\uff09\u4ee5\u4e0b\u662f\u5982\u4f55\u4f7f\u7528<code>std::atomic<\/code>\u6765\u7edf\u8ba1\u8c03\u7528\u6b21\u6570\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Point {                                   \/\/2D\u70b9\npublic:\n    \u2026\n    double distanceFromOrigin() const noexcept  \/\/noexcept\u7684\u4f7f\u7528\n    {                                           \/\/\u53c2\u8003\u6761\u6b3e14\n        ++callCount;                            \/\/atomic\u7684\u9012\u589e\n        \n        return std::sqrt((x * x) + (y * y));\n    }\n\nprivate:\n    mutable std::atomic&lt;unsigned&gt; callCount{ 0 };\n    double x, y;\n};<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e17\uff1a\u7406\u89e3\u7279\u6b8a\u6210\u5458\u51fd\u6570\u7684\u751f\u6210<\/h3>\n\n\n\n<p> \u672c\u6761\u6b3e\u4e2d\uff0c\u7b80\u5355\u8bb0\u4f4f\u5982\u679c\u652f\u6301\u79fb\u52a8\u5c31\u4f1a\u9010\u6210\u5458\u79fb\u52a8\u7c7b\u6210\u5458\u548c\u57fa\u7c7b\u6210\u5458\uff0c\u5982\u679c\u4e0d\u652f\u6301\u79fb\u52a8\u5c31\u6267\u884c\u62f7\u8d1d\u64cd\u4f5c\u5c31\u597d\u4e86\u3002<\/p>\n\n\n\n<p>\u4e24\u4e2a\u62f7\u8d1d\u64cd\u4f5c\u662f\u72ec\u7acb\u7684\uff1a\u58f0\u660e\u4e00\u4e2a\u4e0d\u4f1a\u9650\u5236\u7f16\u8bd1\u5668\u751f\u6210\u53e6\u4e00\u4e2a\u3002\u4e24\u4e2a\u79fb\u52a8\u64cd\u4f5c\u4e0d\u662f\u76f8\u4e92\u72ec\u7acb\u7684\u3002\u5982\u679c\u4f60\u58f0\u660e\u4e86\u5176\u4e2d\u4e00\u4e2a\uff0c\u7f16\u8bd1\u5668\u5c31\u4e0d\u518d\u751f\u6210\u53e6\u4e00\u4e2a\u3002\u518d\u8fdb\u4e00\u6b65\uff0c\u5982\u679c\u4e00\u4e2a\u7c7b\u663e\u5f0f\u58f0\u660e\u4e86\u62f7\u8d1d\u64cd\u4f5c\uff0c\u7f16\u8bd1\u5668\u5c31\u4e0d\u4f1a\u751f\u6210\u79fb\u52a8\u64cd\u4f5c\u3002<\/p>\n\n\n\n<p>\u4e5f\u8bb8\u4f60\u65e9\u5df2\u542c\u8fc7_Rule of Three_\u89c4\u5219\u3002\u8fd9\u4e2a\u89c4\u5219\u544a\u8bc9\u6211\u4eec\u5982\u679c\u4f60\u58f0\u660e\u4e86\u62f7\u8d1d\u6784\u9020\u51fd\u6570\uff0c\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\uff0c\u6216\u8005\u6790\u6784\u51fd\u6570\u4e09\u8005\u4e4b\u4e00\uff0c\u4f60\u5e94\u8be5\u4e5f\u58f0\u660e\u5176\u4f59\u4e24\u4e2a\u3002\u5b83\u6765\u6e90\u4e8e\u957f\u671f\u7684\u89c2\u5bdf\uff0c\u5373\u7528\u6237\u63a5\u7ba1\u62f7\u8d1d\u64cd\u4f5c\u7684\u9700\u6c42\u51e0\u4e4e\u90fd\u662f\u56e0\u4e3a\u8be5\u7c7b\u4f1a\u505a\u5176\u4ed6\u8d44\u6e90\u7684\u7ba1\u7406\uff0c\u8fd9\u4e5f\u51e0\u4e4e\u610f\u5473\u7740\uff081\uff09\u65e0\u8bba\u54ea\u79cd\u8d44\u6e90\u7ba1\u7406\u5982\u679c\u5728\u4e00\u4e2a\u62f7\u8d1d\u64cd\u4f5c\u5185\u5b8c\u6210\uff0c\u4e5f\u5e94\u8be5\u5728\u53e6\u4e00\u4e2a\u62f7\u8d1d\u64cd\u4f5c\u5185\u5b8c\u6210\uff082\uff09\u7c7b\u7684\u6790\u6784\u51fd\u6570\u4e5f\u9700\u8981\u53c2\u4e0e\u8d44\u6e90\u7684\u7ba1\u7406\uff08\u901a\u5e38\u662f\u91ca\u653e\uff09\u3002\u901a\u5e38\u8981\u7ba1\u7406\u7684\u8d44\u6e90\u662f\u5185\u5b58\uff0c\u8fd9\u4e5f\u662f\u4e3a\u4ec0\u4e48\u6807\u51c6\u5e93\u91cc\u9762\u90a3\u4e9b\u7ba1\u7406\u5185\u5b58\u7684\u7c7b\uff08\u5982\u4f1a\u52a8\u6001\u5185\u5b58\u7ba1\u7406\u7684STL\u5bb9\u5668\uff09\u90fd\u58f0\u660e\u4e86\u201c<em>the big three<\/em>\u201d\uff1a\u62f7\u8d1d\u6784\u9020\uff0c\u62f7\u8d1d\u8d4b\u503c\u548c\u6790\u6784\u3002<\/p>\n\n\n\n<p><em>Rule of Three<\/em>\u5e26\u6765\u7684\u540e\u679c\u5c31\u662f\u53ea\u8981\u51fa\u73b0\u7528\u6237\u5b9a\u4e49\u7684\u6790\u6784\u51fd\u6570\u5c31\u610f\u5473\u7740\u7b80\u5355\u7684\u9010\u6210\u5458\u62f7\u8d1d\u64cd\u4f5c\u4e0d\u9002\u7528\u4e8e\u8be5\u7c7b\u3002\u90a3\u610f\u5473\u7740\u5982\u679c\u4e00\u4e2a\u7c7b\u58f0\u660e\u4e86\u6790\u6784\uff0c\u62f7\u8d1d\u64cd\u4f5c\u53ef\u80fd\u4e0d\u5e94\u8be5\u81ea\u52a8\u751f\u6210\uff0c\u56e0\u4e3a\u5b83\u4eec\u505a\u7684\u4e8b\u60c5\u53ef\u80fd\u662f\u9519\u8bef\u7684\u3002\u5728C++98\u63d0\u51fa\u7684\u65f6\u5019\uff0c\u4e0a\u8ff0\u63a8\u7406\u6ca1\u6709\u5f97\u5012\u8db3\u591f\u7684\u91cd\u89c6\uff0c\u6240\u4ee5C++98\u7528\u6237\u58f0\u660e\u6790\u6784\u51fd\u6570\u4e0d\u4f1a\u5de6\u53f3\u7f16\u8bd1\u5668\u751f\u6210\u62f7\u8d1d\u64cd\u4f5c\u7684\u610f\u613f\u3002C++11\u4e2d\u60c5\u51b5\u4ecd\u7136\u5982\u6b64\uff0c\u4f46\u4ec5\u4ec5\u662f\u56e0\u4e3a\u9650\u5236\u62f7\u8d1d\u64cd\u4f5c\u751f\u6210\u7684\u6761\u4ef6\u4f1a\u7834\u574f\u8001\u4ee3\u7801\u3002<\/p>\n\n\n\n<p><em>Rule of Three<\/em>\u89c4\u5219\u80cc\u540e\u7684\u89e3\u91ca\u4f9d\u7136\u6709\u6548\uff0c\u518d\u52a0\u4e0a\u5bf9\u58f0\u660e\u62f7\u8d1d\u64cd\u4f5c\u963b\u6b62\u79fb\u52a8\u64cd\u4f5c\u9690\u5f0f\u751f\u6210\u7684\u89c2\u5bdf\uff0c\u4f7f\u5f97C++11\u4e0d\u4f1a\u4e3a\u90a3\u4e9b\u6709\u7528\u6237\u5b9a\u4e49\u7684\u6790\u6784\u51fd\u6570\u7684\u7c7b\u751f\u6210\u79fb\u52a8\u64cd\u4f5c\u3002<\/p>\n\n\n\n<p>\u6240\u4ee5\u4ec5\u5f53\u4e0b\u9762\u6761\u4ef6\u6210\u7acb\u65f6\u624d\u4f1a\u751f\u6210\u79fb\u52a8\u64cd\u4f5c\uff08\u5f53\u9700\u8981\u65f6\uff09\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7c7b\u4e2d\u6ca1\u6709\u62f7\u8d1d\u64cd\u4f5c<\/li>\n\n\n\n<li>\u7c7b\u4e2d\u6ca1\u6709\u79fb\u52a8\u64cd\u4f5c<\/li>\n\n\n\n<li>\u7c7b\u4e2d\u6ca1\u6709\u7528\u6237\u5b9a\u4e49\u7684\u6790\u6784<\/li>\n<\/ul>\n\n\n\n<p>C++11\u5bf9\u4e8e\u7279\u6b8a\u6210\u5458\u51fd\u6570\u5904\u7406\u7684\u89c4\u5219\u5982\u4e0b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9ed8\u8ba4\u6784\u9020\u51fd\u6570<\/strong>\uff1a\u548cC++98\u89c4\u5219\u76f8\u540c\u3002\u4ec5\u5f53\u7c7b\u4e0d\u5b58\u5728\u7528\u6237\u58f0\u660e\u7684\u6784\u9020\u51fd\u6570\u65f6\u624d\u81ea\u52a8\u751f\u6210\u3002<\/li>\n\n\n\n<li><strong>\u6790\u6784\u51fd\u6570<\/strong>\uff1a\u57fa\u672c\u4e0a\u548cC++98\u76f8\u540c\uff1b\u7a0d\u5fae\u4e0d\u540c\u7684\u662f\u73b0\u5728\u6790\u6784\u9ed8\u8ba4<code>noexcept<\/code>\uff08\u53c2\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/3.MovingToModernCpp\/item14.md\" target=\"_blank\"  rel=\"nofollow\" >Item14<\/a>\uff09\u3002\u548cC++98\u4e00\u6837\uff0c\u4ec5\u5f53\u57fa\u7c7b\u6790\u6784\u4e3a\u865a\u51fd\u6570\u65f6\u8be5\u7c7b\u6790\u6784\u624d\u4e3a\u865a\u51fd\u6570\u3002<\/li>\n\n\n\n<li><strong>\u62f7\u8d1d\u6784\u9020\u51fd\u6570<\/strong>\uff1a\u548cC++98\u8fd0\u884c\u65f6\u884c\u4e3a\u4e00\u6837\uff1a\u9010\u6210\u5458\u62f7\u8d1dnon-static\u6570\u636e\u3002\u4ec5\u5f53\u7c7b\u6ca1\u6709\u7528\u6237\u5b9a\u4e49\u7684\u62f7\u8d1d\u6784\u9020\u65f6\u624d\u751f\u6210\u3002\u5982\u679c\u7c7b\u58f0\u660e\u4e86\u79fb\u52a8\u64cd\u4f5c\u5b83\u5c31\u662f<em>delete<\/em>\u7684\u3002\u5f53\u7528\u6237\u58f0\u660e\u4e86\u62f7\u8d1d\u8d4b\u503c\u6216\u8005\u6790\u6784\uff0c\u8be5\u51fd\u6570\u81ea\u52a8\u751f\u6210\u5df2\u88ab\u5e9f\u5f03\u3002<\/li>\n\n\n\n<li><strong>\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26<\/strong>\uff1a\u548cC++98\u8fd0\u884c\u65f6\u884c\u4e3a\u4e00\u6837\uff1a\u9010\u6210\u5458\u62f7\u8d1d\u8d4b\u503cnon-static\u6570\u636e\u3002\u4ec5\u5f53\u7c7b\u6ca1\u6709\u7528\u6237\u5b9a\u4e49\u7684\u62f7\u8d1d\u8d4b\u503c\u65f6\u624d\u751f\u6210\u3002\u5982\u679c\u7c7b\u58f0\u660e\u4e86\u79fb\u52a8\u64cd\u4f5c\u5b83\u5c31\u662f<em>delete<\/em>\u7684\u3002\u5f53\u7528\u6237\u58f0\u660e\u4e86\u62f7\u8d1d\u6784\u9020\u6216\u8005\u6790\u6784\uff0c\u8be5\u51fd\u6570\u81ea\u52a8\u751f\u6210\u5df2\u88ab\u5e9f\u5f03\u3002<\/li>\n\n\n\n<li><strong>\u79fb\u52a8\u6784\u9020\u51fd\u6570<\/strong>\u548c<strong>\u79fb\u52a8\u8d4b\u503c\u8fd0\u7b97\u7b26<\/strong>\uff1a\u90fd\u5bf9\u975estatic\u6570\u636e\u6267\u884c\u9010\u6210\u5458\u79fb\u52a8\u3002\u4ec5\u5f53\u7c7b\u6ca1\u6709\u7528\u6237\u5b9a\u4e49\u7684\u62f7\u8d1d\u64cd\u4f5c\uff0c\u79fb\u52a8\u64cd\u4f5c\u6216\u6790\u6784\u65f6\u624d\u81ea\u52a8\u751f\u6210\u3002<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c\u56db\u7ae0 \u667a\u80fd\u6307\u9488<\/h2>\n\n\n\n<p>\u539f\u59cb\u6307\u9488\u5f88\u96be\u88ab\u7231\u7684\u539f\u56e0\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5b83\u7684\u58f0\u660e\u4e0d\u80fd\u6307\u793a\u6240\u6307\u5230\u5e95\u662f\u5355\u4e2a\u5bf9\u8c61\u8fd8\u662f\u6570\u7ec4\u3002<\/li>\n\n\n\n<li>\u5b83\u7684\u58f0\u660e\u6ca1\u6709\u544a\u8bc9\u4f60\u7528\u5b8c\u540e\u662f\u5426\u5e94\u8be5\u9500\u6bc1\u5b83\uff0c\u5373\u6307\u9488\u662f\u5426\u62e5\u6709\u6240\u6307\u4e4b\u7269\u3002<\/li>\n\n\n\n<li>\u5982\u679c\u4f60\u51b3\u5b9a\u4f60\u5e94\u8be5\u9500\u6bc1\u6307\u9488\u6240\u6307\u5bf9\u8c61\uff0c\u6ca1\u4eba\u544a\u8bc9\u4f60\u8be5\u7528<code>delete<\/code>\u8fd8\u662f\u5176\u4ed6\u6790\u6784\u673a\u5236\uff08\u6bd4\u5982\u5c06\u6307\u9488\u4f20\u7ed9\u4e13\u95e8\u7684\u9500\u6bc1\u51fd\u6570\uff09\u3002<\/li>\n\n\n\n<li>\u5982\u679c\u4f60\u53d1\u73b0\u8be5\u7528<code>delete<\/code>\u3002 \u539f\u56e01\u8bf4\u4e86\u53ef\u80fd\u4e0d\u77e5\u9053\u8be5\u7528\u5355\u4e2a\u5bf9\u8c61\u5f62\u5f0f\uff08\u201c<code>delete<\/code>\u201d\uff09\u8fd8\u662f\u6570\u7ec4\u5f62\u5f0f\uff08\u201c<code>delete[]<\/code>\u201d\uff09\u3002\u5982\u679c\u7528\u9519\u4e86\u7ed3\u679c\u662f\u672a\u5b9a\u4e49\u7684\u3002<\/li>\n\n\n\n<li>\u5047\u8bbe\u4f60\u786e\u5b9a\u4e86\u6307\u9488\u6240\u6307\uff0c\u77e5\u9053\u9500\u6bc1\u673a\u5236\uff0c\u4e5f\u5f88\u96be\u786e\u5b9a\u4f60\u5728\u6240\u6709\u6267\u884c\u8def\u5f84\u4e0a\u90fd\u6267\u884c\u4e86<strong>\u6070\u4e3a\u4e00\u6b21<\/strong>\u9500\u6bc1\u64cd\u4f5c\uff08\u5305\u62ec\u5f02\u5e38\u4ea7\u751f\u540e\u7684\u8def\u5f84\uff09\u3002\u5c11\u4e00\u6761\u8def\u5f84\u5c31\u4f1a\u4ea7\u751f\u8d44\u6e90\u6cc4\u6f0f\uff0c\u9500\u6bc1\u591a\u6b21\u8fd8\u4f1a\u5bfc\u81f4\u672a\u5b9a\u4e49\u884c\u4e3a\u3002<\/li>\n\n\n\n<li>\u4e00\u822c\u6765\u8bf4\u6ca1\u6709\u529e\u6cd5\u544a\u8bc9\u4f60\u6307\u9488\u662f\u5426\u53d8\u6210\u4e86\u60ac\u7a7a\u6307\u9488\uff08dangling pointers\uff09\uff0c\u5373\u5185\u5b58\u4e2d\u4e0d\u518d\u5b58\u5728\u6307\u9488\u6240\u6307\u4e4b\u7269\u3002\u5728\u5bf9\u8c61\u9500\u6bc1\u540e\u6307\u9488\u4ecd\u6307\u5411\u5b83\u4eec\u5c31\u4f1a\u4ea7\u751f\u60ac\u7a7a\u6307\u9488\u3002<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e\u5341\u516b\uff1a\u5bf9\u4e8e\u72ec\u5360\u8d44\u6e90\u4f7f\u7528<code>std::unique_ptr<\/code><\/h3>\n\n\n\n<p>auto delInvmt = [](Investment* pInvestment)         \/\/\u81ea\u5b9a\u4e49\u5220\u9664\u5668 <br>                {                                   \/\/\uff08lambda\u8868\u8fbe\u5f0f\uff09 <br>                    makeLogEntry(pInvestment); <br>                    delete pInvestment;  <br>                }; <br> <br>template&lt;typename... Ts&gt; <br>std::unique_ptr&lt;Investment, decltype(delInvmt)&gt;     \/\/\u66f4\u6539\u540e\u7684\u8fd4\u56de\u7c7b\u578b <br>makeInvestment(Ts&amp;&amp;... params) <br>{ <br>    std::unique_ptr&lt;Investment, decltype(delInvmt)&gt; \/\/\u5e94\u8fd4\u56de\u7684\u6307\u9488 <br>        pInv(nullptr, delInvmt); <br>    if (\/*\u4e00\u4e2aStock\u5bf9\u8c61\u5e94\u88ab\u521b\u5efa*\/) <br>    { <br>        pInv.reset(new Stock(std::forward&lt;Ts&gt;(params)...)); <br>    } <br>    else if ( \/*\u4e00\u4e2aBond\u5bf9\u8c61\u5e94\u88ab\u521b\u5efa*\/ )    <br>    {      <br>        pInv.reset(new Bond(std::forward&lt;Ts&gt;(params)...));    <br>    }    <br>    else if ( \/*\u4e00\u4e2aRealEstate\u5bf9\u8c61\u5e94\u88ab\u521b\u5efa*\/ )    <br>    {      <br>        pInv.reset(new RealEstate(std::forward&lt;Ts&gt;(params)...));    <br>    }    <br>    return pInv; <br>}<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>delInvmt<\/code>\u662f\u4ece<code>makeInvestment<\/code>\u8fd4\u56de\u7684\u5bf9\u8c61\u7684\u81ea\u5b9a\u4e49\u7684\u5220\u9664\u5668\u3002\u6240\u6709\u7684\u81ea\u5b9a\u4e49\u7684\u5220\u9664\u884c\u4e3a\u63a5\u53d7\u8981\u9500\u6bc1\u5bf9\u8c61\u7684\u539f\u59cb\u6307\u9488\uff0c\u7136\u540e\u6267\u884c\u6240\u6709\u5fc5\u8981\u884c\u4e3a\u5b9e\u73b0\u9500\u6bc1\u64cd\u4f5c\u3002\u5728\u4e0a\u9762\u60c5\u51b5\u4e2d\uff0c\u64cd\u4f5c\u5305\u62ec\u8c03\u7528<code>makeLogEntry<\/code>\u7136\u540e\u5e94\u7528<code>delete<\/code>\u3002\u4f7f\u7528<em>lambda<\/em>\u521b\u5efa<code>delInvmt<\/code>\u662f\u65b9\u4fbf\u7684\uff0c\u800c\u4e14\uff0c\u6b63\u5982\u7a0d\u540e\u770b\u5230\u7684\uff0c\u6bd4\u7f16\u5199\u5e38\u89c4\u7684\u51fd\u6570\u66f4\u6709\u6548\u3002<\/li>\n\n\n\n<li>\u5f53\u4f7f\u7528\u81ea\u5b9a\u4e49\u5220\u9664\u5668\u65f6\uff0c\u5220\u9664\u5668\u7c7b\u578b\u5fc5\u987b\u4f5c\u4e3a\u7b2c\u4e8c\u4e2a\u7c7b\u578b\u5b9e\u53c2\u4f20\u7ed9<code>std::unique_ptr<\/code>\u3002\u5728\u4e0a\u9762\u60c5\u51b5\u4e2d\uff0c\u5c31\u662f<code>delInvmt<\/code>\u7684\u7c7b\u578b\uff0c\u8fd9\u5c31\u662f\u4e3a\u4ec0\u4e48<code>makeInvestment<\/code>\u8fd4\u56de\u7c7b\u578b\u662f<code>std::unique_ptr&lt;Investment, decltype(delInvmt)&gt;<\/code>\u3002\uff08\u5bf9\u4e8e<code>decltype<\/code>\uff0c\u66f4\u591a\u4fe1\u606f\u67e5\u770b<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/1.DeducingTypes\/item3.md\" target=\"_blank\"  rel=\"nofollow\" >Item3<\/a>\uff09<\/li>\n\n\n\n<li><code>makeInvestment<\/code>\u7684\u57fa\u672c\u7b56\u7565\u662f\u521b\u5efa\u4e00\u4e2a\u7a7a\u7684<code>std::unique_ptr<\/code>\uff0c\u7136\u540e\u6307\u5411\u4e00\u4e2a\u5408\u9002\u7c7b\u578b\u7684\u5bf9\u8c61\uff0c\u7136\u540e\u8fd4\u56de\u3002\u4e3a\u4e86\u5c06\u81ea\u5b9a\u4e49\u5220\u9664\u5668<code>delInvmt<\/code>\u4e0e<code>pInv<\/code>\u5173\u8054\uff0c\u6211\u4eec\u628a<code>delInvmt<\/code>\u4f5c\u4e3a<code>pInv<\/code>\u6784\u9020\u51fd\u6570\u7684\u7b2c\u4e8c\u4e2a\u5b9e\u53c2\u3002<\/li>\n\n\n\n<li>\u5c1d\u8bd5\u5c06\u539f\u59cb\u6307\u9488\uff08\u6bd4\u5982<code>new<\/code>\u521b\u5efa\uff09\u8d4b\u503c\u7ed9<code>std::unique_ptr<\/code>\u901a\u4e0d\u8fc7\u7f16\u8bd1\uff0c\u56e0\u4e3a\u662f\u4e00\u79cd\u4ece\u539f\u59cb\u6307\u9488\u5230\u667a\u80fd\u6307\u9488\u7684\u9690\u5f0f\u8f6c\u6362\u3002\u8fd9\u79cd\u9690\u5f0f\u8f6c\u6362\u4f1a\u51fa\u95ee\u9898\uff0c\u6240\u4ee5C++11\u7684\u667a\u80fd\u6307\u9488\u7981\u6b62\u8fd9\u4e2a\u884c\u4e3a\u3002\u8fd9\u5c31\u662f\u901a\u8fc7<code>reset<\/code>\u6765\u8ba9<code>pInv<\/code>\u63a5\u7ba1\u901a\u8fc7<code>new<\/code>\u521b\u5efa\u7684\u5bf9\u8c61\u7684\u6240\u6709\u6743\u7684\u539f\u56e0\u3002<\/li>\n\n\n\n<li>\u4f7f\u7528<code>new<\/code>\u65f6\uff0c\u6211\u4eec\u4f7f\u7528<code>std::forward<\/code>\u628a\u4f20\u7ed9<code>makeInvestment<\/code>\u7684\u5b9e\u53c2\u5b8c\u7f8e\u8f6c\u53d1\u51fa\u53bb\uff08\u67e5\u770b<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/5.RRefMovSemPerfForw\/item25.md\" target=\"_blank\"  rel=\"nofollow\" >Item25<\/a>\uff09\u3002\u8fd9\u4f7f\u8c03\u7528\u8005\u63d0\u4f9b\u7684\u6240\u6709\u4fe1\u606f\u53ef\u7528\u4e8e\u6b63\u5728\u521b\u5efa\u7684\u5bf9\u8c61\u7684\u6784\u9020\u51fd\u6570\u3002<\/li>\n\n\n\n<li>\u81ea\u5b9a\u4e49\u5220\u9664\u5668\u7684\u4e00\u4e2a\u5f62\u53c2\uff0c\u7c7b\u578b\u662f<code>Investment*<\/code>\uff0c\u4e0d\u7ba1\u5728<code>makeInvestment<\/code>\u5185\u90e8\u521b\u5efa\u7684\u5bf9\u8c61\u7684\u771f\u5b9e\u7c7b\u578b\uff08\u5982<code>Stock<\/code>\uff0c<code>Bond<\/code>\uff0c\u6216<code>RealEstate<\/code>\uff09\u662f\u4ec0\u4e48\uff0c\u5b83\u6700\u7ec8\u5728<em>lambda<\/em>\u8868\u8fbe\u5f0f\u4e2d\uff0c\u4f5c\u4e3a<code>Investment*<\/code>\u5bf9\u8c61\u88ab\u5220\u9664\u3002\u8fd9\u610f\u5473\u7740\u6211\u4eec\u901a\u8fc7\u57fa\u7c7b\u6307\u9488\u5220\u9664\u6d3e\u751f\u7c7b\u5b9e\u4f8b\uff0c\u4e3a\u6b64\uff0c\u57fa\u7c7b<code>Investment<\/code>\u5fc5\u987b\u6709\u865a\u6790\u6784\u51fd\u6570<\/li>\n<\/ul>\n\n\n\n<p>\u6211\u4e4b\u524d\u8bf4\u8fc7\uff0c\u5f53\u4f7f\u7528\u9ed8\u8ba4\u5220\u9664\u5668\u65f6\uff08\u5982<code>delete<\/code>\uff09\uff0c\u4f60\u53ef\u4ee5\u5408\u7406\u5047\u8bbe<code>std::unique_ptr<\/code>\u5bf9\u8c61\u548c\u539f\u59cb\u6307\u9488\u5927\u5c0f\u76f8\u540c\u3002\u5f53\u81ea\u5b9a\u4e49\u5220\u9664\u5668\u65f6\uff0c\u60c5\u51b5\u53ef\u80fd\u4e0d\u518d\u5982\u6b64\u3002\u51fd\u6570\u6307\u9488\u5f62\u5f0f\u7684\u5220\u9664\u5668\uff0c\u901a\u5e38\u4f1a\u4f7f<code>std::unique_ptr<\/code>\u7684\u5927\u5c0f\u4ece\u4e00\u4e2a\u5b57\uff08<em>word<\/em>\uff09\u589e\u52a0\u5230\u4e24\u4e2a\u3002\u5bf9\u4e8e\u51fd\u6570\u5bf9\u8c61\u5f62\u5f0f\u7684\u5220\u9664\u5668\u6765\u8bf4\uff0c\u53d8\u5316\u7684\u5927\u5c0f\u53d6\u51b3\u4e8e\u51fd\u6570\u5bf9\u8c61\u4e2d\u5b58\u50a8\u7684\u72b6\u6001\u591a\u5c11\uff0c\u65e0\u72b6\u6001\u51fd\u6570\uff08stateless function\uff09\u5bf9\u8c61\uff08\u6bd4\u5982\u4e0d\u6355\u83b7\u53d8\u91cf\u7684<em>lambda<\/em>\u8868\u8fbe\u5f0f\uff09\u5bf9\u5927\u5c0f\u6ca1\u6709\u5f71\u54cd\uff0c\u8fd9\u610f\u5473\u5f53\u81ea\u5b9a\u4e49\u5220\u9664\u5668\u53ef\u4ee5\u5b9e\u73b0\u4e3a\u51fd\u6570\u6216\u8005<em>lambda<\/em>\u65f6\uff0c\u5c3d\u91cf\u4f7f\u7528<em>lambda<\/em><\/p>\n\n\n\n<p>\u5de5\u5382\u51fd\u6570\u4e0d\u662f<code>std::unique_ptr<\/code>\u7684\u552f\u4e00\u5e38\u89c1\u7528\u6cd5\u3002\u4f5c\u4e3a\u5b9e\u73b0<strong>Pimpl Idiom<\/strong>\uff08\u8bd1\u6ce8\uff1a<em>pointer to implementation<\/em>\uff0c\u4e00\u79cd\u9690\u85cf\u5b9e\u9645\u5b9e\u73b0\u800c\u51cf\u5f31\u7f16\u8bd1\u4f9d\u8d56\u6027\u7684\u8bbe\u8ba1\u601d\u60f3\uff0c\u300aEffective C++\u300b\u6761\u6b3e31\u5bf9\u6b64\u6709\u8fc7\u53d9\u8ff0\uff09\u7684\u4e00\u79cd\u673a\u5236\uff0c\u5b83\u66f4\u4e3a\u6d41\u884c\u3002\u4ee3\u7801\u5e76\u4e0d\u590d\u6742\uff0c\u4f46\u662f\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u5e76\u4e0d\u76f4\u89c2\uff0c\u6240\u4ee5\u8fd9\u5b89\u6392\u5728<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/4.SmartPointers\/item22.md\" target=\"_blank\"  rel=\"nofollow\" >Item22<\/a>\u7684\u4e13\u95e8\u4e3b\u9898\u4e2d\u3002<\/p>\n\n\n\n<p><code>std::unique_ptr<\/code>\u6709\u4e24\u79cd\u5f62\u5f0f\uff0c\u4e00\u79cd\u7528\u4e8e\u5355\u4e2a\u5bf9\u8c61\uff08<code>std::unique_ptr&lt;T&gt;<\/code>\uff09\uff0c\u4e00\u79cd\u7528\u4e8e\u6570\u7ec4\uff08<code>std::unique_ptr&lt;T[]&gt;<\/code>\uff09\u3002\u7ed3\u679c\u5c31\u662f\uff0c\u6307\u5411\u54ea\u79cd\u5f62\u5f0f\u6ca1\u6709\u6b67\u4e49\u3002<code>std::unique_ptr<\/code>\u7684API\u8bbe\u8ba1\u4f1a\u81ea\u52a8\u5339\u914d\u4f60\u7684\u7528\u6cd5\uff0c\u6bd4\u5982<code>operator[]<\/code>\u5c31\u662f\u6570\u7ec4\u5bf9\u8c61\uff0c\u89e3\u5f15\u7528\u64cd\u4f5c\u7b26\uff08<code>operator*<\/code>\u548c<code>operator-&gt;<\/code>\uff09\u5c31\u662f\u5355\u4e2a\u5bf9\u8c61\u4e13\u6709\u3002<\/p>\n\n\n\n<p>\u4f60\u5e94\u8be5\u5bf9\u6570\u7ec4\u7684<code>std::unique_ptr<\/code>\u7684\u5b58\u5728\u5174\u8da3\u6cdb\u6cdb\uff0c\u56e0\u4e3a<code>std::array<\/code>\uff0c<code>std::vector<\/code>\uff0c<code>std::string<\/code>\u8fd9\u4e9b\u66f4\u597d\u7528\u7684\u6570\u636e\u5bb9\u5668\u5e94\u8be5\u53d6\u4ee3\u539f\u59cb\u6570\u7ec4\u3002<code>std::unique_ptr&lt;T[]&gt;<\/code>\u6709\u7528\u7684\u552f\u4e00\u60c5\u51b5\u662f\u4f60\u4f7f\u7528\u7c7b\u4f3cC\u7684API\u8fd4\u56de\u4e00\u4e2a\u6307\u5411\u5806\u6570\u7ec4\u7684\u539f\u59cb\u6307\u9488\uff0c\u800c\u4f60\u60f3\u63a5\u7ba1\u8fd9\u4e2a\u6570\u7ec4\u7684\u6240\u6709\u6743\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e\u5341\u4e5d\uff1a\u5bf9\u4e8e\u5171\u4eab\u8d44\u6e90\u4f7f\u7528<code>std::shared_ptr<\/code><\/h3>\n\n\n\n<p><code>std::shared_ptr<\/code>\u901a\u8fc7\u5f15\u7528\u8ba1\u6570\uff08<em>reference count<\/em>\uff09\u6765\u786e\u4fdd\u5b83\u662f\u5426\u662f\u6700\u540e\u4e00\u4e2a\u6307\u5411\u67d0\u79cd\u8d44\u6e90\u7684\u6307\u9488\uff0c\u5f15\u7528\u8ba1\u6570\u5173\u8054\u8d44\u6e90\u5e76\u8ddf\u8e2a\u6709\u591a\u5c11<code>std::shared_ptr<\/code>\u6307\u5411\u8be5\u8d44\u6e90\u3002<code>std::shared_ptr<\/code>\u6784\u9020\u51fd\u6570\u9012\u589e\u5f15\u7528\u8ba1\u6570\u503c\uff08\u6ce8\u610f\u662f<strong>\u901a\u5e38<\/strong>\u2014\u2014\u539f\u56e0\u53c2\u89c1\u4e0b\u9762\uff09\uff0c\u6790\u6784\u51fd\u6570\u9012\u51cf\u503c\uff0c\u62f7\u8d1d\u8d4b\u503c\u8fd0\u7b97\u7b26\u505a\u524d\u9762\u8fd9\u4e24\u4e2a\u5de5\u4f5c\u3002\uff08\u5982\u679c<code>sp1<\/code>\u548c<code>sp2<\/code>\u662f<code>std::shared_ptr<\/code>\u5e76\u4e14\u6307\u5411\u4e0d\u540c\u5bf9\u8c61\uff0c\u8d4b\u503c\u201c<code>sp1 = sp2;<\/code>\u201d\u4f1a\u4f7f<code>sp1<\/code>\u6307\u5411<code>sp2<\/code>\u6307\u5411\u7684\u5bf9\u8c61\u3002\u76f4\u63a5\u6548\u679c\u5c31\u662f<code>sp1<\/code>\u5f15\u7528\u8ba1\u6570\u51cf\u4e00\uff0c<code>sp2<\/code>\u5f15\u7528\u8ba1\u6570\u52a0\u4e00\u3002\uff09\u5982\u679c<code>std::shared_ptr<\/code>\u5728\u8ba1\u6570\u503c\u9012\u51cf\u540e\u53d1\u73b0\u5f15\u7528\u8ba1\u6570\u503c\u4e3a\u96f6\uff0c\u6ca1\u6709\u5176\u4ed6<code>std::shared_ptr<\/code>\u6307\u5411\u8be5\u8d44\u6e90\uff0c\u5b83\u5c31\u4f1a\u9500\u6bc1\u8d44\u6e90\u3002<\/p>\n\n\n\n<p>\u5f15\u7528\u8ba1\u6570\u6697\u793a\u7740\u6027\u80fd\u95ee\u9898\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>std::shared_ptr<\/code>\u5927\u5c0f\u662f\u539f\u59cb\u6307\u9488\u7684\u4e24\u500d<\/strong>\uff0c\u56e0\u4e3a\u5b83\u5185\u90e8\u5305\u542b\u4e00\u4e2a\u6307\u5411\u8d44\u6e90\u7684\u539f\u59cb\u6307\u9488\uff0c\u8fd8\u5305\u542b\u4e00\u4e2a\u6307\u5411\u8d44\u6e90\u7684\u5f15\u7528\u8ba1\u6570\u503c\u7684\u539f\u59cb\u6307\u9488\u3002\uff08\u8fd9\u79cd\u5b9e\u73b0\u6cd5\u5e76\u4e0d\u662f\u6807\u51c6\u8981\u6c42\u7684\uff0c\u4f46\u662f\u6211\uff08\u6307\u539f\u4e66\u4f5c\u8005Scott Meyers\uff09\u719f\u6089\u7684\u6240\u6709\u6807\u51c6\u5e93\u90fd\u8fd9\u6837\u5b9e\u73b0\u3002\uff09<\/li>\n\n\n\n<li><strong>\u5f15\u7528\u8ba1\u6570\u7684\u5185\u5b58\u5fc5\u987b\u52a8\u6001\u5206\u914d<\/strong>\u3002 \u6982\u5ff5\u4e0a\uff0c\u5f15\u7528\u8ba1\u6570\u4e0e\u6240\u6307\u5bf9\u8c61\u5173\u8054\u8d77\u6765\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u88ab\u6307\u5411\u7684\u5bf9\u8c61\u4e0d\u77e5\u9053\u8fd9\u4ef6\u4e8b\u60c5\uff08\u8bd1\u6ce8\uff1a\u4e0d\u77e5\u9053\u6709\u4e00\u4e2a\u5173\u8054\u5230\u81ea\u5df1\u7684\u8ba1\u6570\u503c\uff09\u3002\u56e0\u6b64\u5b83\u4eec\u6ca1\u6709\u529e\u6cd5\u5b58\u653e\u4e00\u4e2a\u5f15\u7528\u8ba1\u6570\u503c\u3002\uff08\u4e00\u4e2a\u597d\u6d88\u606f\u662f\u4efb\u4f55\u5bf9\u8c61\u2014\u2014\u751a\u81f3\u662f\u5185\u7f6e\u7c7b\u578b\u7684\u2014\u2014\u90fd\u53ef\u4ee5\u7531<code>std::shared_ptr<\/code>\u7ba1\u7406\u3002\uff09<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/4.SmartPointers\/item21.md\" target=\"_blank\"  rel=\"nofollow\" >Item21<\/a>\u4f1a\u89e3\u91ca\u4f7f\u7528<code>std::make_shared<\/code>\u521b\u5efa<code>std::shared_ptr<\/code>\u53ef\u4ee5\u907f\u514d\u5f15\u7528\u8ba1\u6570\u7684\u52a8\u6001\u5206\u914d\uff0c\u4f46\u662f\u8fd8\u5b58\u5728\u4e00\u4e9b<code>std::make_shared<\/code>\u4e0d\u80fd\u4f7f\u7528\u7684\u573a\u666f\uff0c\u8fd9\u65f6\u5019\u5f15\u7528\u8ba1\u6570\u5c31\u4f1a\u52a8\u6001\u5206\u914d\u3002<\/li>\n\n\n\n<li><strong>\u9012\u589e\u9012\u51cf\u5f15\u7528\u8ba1\u6570\u5fc5\u987b\u662f\u539f\u5b50\u6027\u7684<\/strong>\uff0c\u56e0\u4e3a\u591a\u4e2areader\u3001writer\u53ef\u80fd\u5728\u4e0d\u540c\u7684\u7ebf\u7a0b\u3002\u6bd4\u5982\uff0c\u6307\u5411\u67d0\u79cd\u8d44\u6e90\u7684<code>std::shared_ptr<\/code>\u53ef\u80fd\u5728\u4e00\u4e2a\u7ebf\u7a0b\u6267\u884c\u6790\u6784\uff08\u4e8e\u662f\u9012\u51cf\u6307\u5411\u7684\u5bf9\u8c61\u7684\u5f15\u7528\u8ba1\u6570\uff09\uff0c\u5728\u53e6\u4e00\u4e2a\u4e0d\u540c\u7684\u7ebf\u7a0b\uff0c<code>std::shared_ptr<\/code>\u6307\u5411\u76f8\u540c\u7684\u5bf9\u8c61\uff0c\u4f46\u662f\u6267\u884c\u7684\u5374\u662f\u62f7\u8d1d\u64cd\u4f5c\uff08\u56e0\u6b64\u9012\u589e\u4e86\u540c\u4e00\u4e2a\u5f15\u7528\u8ba1\u6570\uff09\u3002\u539f\u5b50\u64cd\u4f5c\u901a\u5e38\u6bd4\u975e\u539f\u5b50\u64cd\u4f5c\u8981\u6162\uff0c\u6240\u4ee5\u5373\u4f7f\u5f15\u7528\u8ba1\u6570\u901a\u5e38\u53ea\u6709\u4e00\u4e2a<em>word<\/em>\u5927\u5c0f\uff0c\u4f60\u4e5f\u5e94\u8be5\u5047\u5b9a\u8bfb\u5199\u5b83\u4eec\u662f\u5b58\u5728\u5f00\u9500\u7684\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u7c7b\u4f3c<code>std::unique_ptr<\/code>\uff08\u53c2\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/4.SmartPointers\/item18.md\" target=\"_blank\"  rel=\"nofollow\" >Item18<\/a>\uff09\uff0c<code>std::shared_ptr<\/code>\u4f7f\u7528<code>delete<\/code>\u4f5c\u4e3a\u8d44\u6e90\u7684\u9ed8\u8ba4\u9500\u6bc1\u673a\u5236\uff0c\u4f46\u662f\u5b83\u4e5f\u652f\u6301\u81ea\u5b9a\u4e49\u7684\u5220\u9664\u5668\u3002\u8fd9\u79cd\u652f\u6301\u6709\u522b\u4e8e<code>std::unique_ptr<\/code>\u3002\u5bf9\u4e8e<code>std::unique_ptr<\/code>\u6765\u8bf4\uff0c\u5220\u9664\u5668\u7c7b\u578b\u662f\u667a\u80fd\u6307\u9488\u7c7b\u578b\u7684\u4e00\u90e8\u5206\u3002\u5bf9\u4e8e<code>std::shared_ptr<\/code>\u5219\u4e0d\u662f\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto loggingDel = &#91;](Widget *pw)        \/\/\u81ea\u5b9a\u4e49\u5220\u9664\u5668\n                  {                     \/\/\uff08\u548c\u6761\u6b3e18\u4e00\u6837\uff09\n                      makeLogEntry(pw);\n                      delete pw;\n                  };\n\nstd::unique_ptr&lt;                        \/\/\u5220\u9664\u5668\u7c7b\u578b\u662f\n    Widget, decltype(loggingDel)        \/\/\u6307\u9488\u7c7b\u578b\u7684\u4e00\u90e8\u5206\n    &gt; upw(new Widget, loggingDel);\nstd::shared_ptr&lt;Widget&gt;                 \/\/\u5220\u9664\u5668\u7c7b\u578b\u4e0d\u662f\n    spw(new Widget, loggingDel);        \/\/\u6307\u9488\u7c7b\u578b\u7684\u4e00\u90e8\u5206<\/code><\/pre>\n\n\n\n<p><code>std::shared_ptr<\/code>\u7684\u8bbe\u8ba1\u66f4\u4e3a\u7075\u6d3b\u3002\u8003\u8651\u6709\u4e24\u4e2a<code>std::shared_ptr&lt;Widget&gt;<\/code>\uff0c\u6bcf\u4e2a\u81ea\u5e26\u4e0d\u540c\u7684\u5220\u9664\u5668\uff08\u6bd4\u5982\u901a\u8fc7<em>lambda<\/em>\u8868\u8fbe\u5f0f\u81ea\u5b9a\u4e49\u5220\u9664\u5668\uff09\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto customDeleter1 = &#91;](Widget *pw) { \u2026 };     \/\/\u81ea\u5b9a\u4e49\u5220\u9664\u5668\uff0c\nauto customDeleter2 = &#91;](Widget *pw) { \u2026 };     \/\/\u6bcf\u79cd\u7c7b\u578b\u4e0d\u540c\nstd::shared_ptr&lt;Widget&gt; pw1(new Widget, customDeleter1);\nstd::shared_ptr&lt;Widget&gt; pw2(new Widget, customDeleter2);<\/code><\/pre>\n\n\n\n<p>\u56e0\u4e3a<code>pw1<\/code>\u548c<code>pw2<\/code>\u6709\u76f8\u540c\u7684\u7c7b\u578b\uff0c\u6240\u4ee5\u5b83\u4eec\u90fd\u53ef\u4ee5\u653e\u5230\u5b58\u653e\u90a3\u4e2a\u7c7b\u578b\u7684\u5bf9\u8c61\u7684\u5bb9\u5668\u4e2d\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::vector&lt;std::shared_ptr&lt;Widget&gt;&gt; vpw{ pw1, pw2 };<\/code><\/pre>\n\n\n\n<p>\u5b83\u4eec\u4e5f\u80fd\u76f8\u4e92\u8d4b\u503c\uff0c\u4e5f\u53ef\u4ee5\u4f20\u5165\u4e00\u4e2a\u5f62\u53c2\u4e3a<code>std::shared_ptr&lt;Widget&gt;<\/code>\u7684\u51fd\u6570\u3002\u4f46\u662f\u81ea\u5b9a\u4e49\u5220\u9664\u5668\u7c7b\u578b\u4e0d\u540c\u7684<code>std::unique_ptr<\/code>\u5c31\u4e0d\u884c\uff0c\u56e0\u4e3a<code>std::unique_ptr<\/code>\u628a\u5220\u9664\u5668\u89c6\u4f5c\u7c7b\u578b\u7684\u4e00\u90e8\u5206\u3002<\/p>\n\n\n\n<p>\u53e6\u4e00\u4e2a\u4e0d\u540c\u4e8e<code>std::unique_ptr<\/code>\u7684\u5730\u65b9\u662f\uff0c\u6307\u5b9a\u81ea\u5b9a\u4e49\u5220\u9664\u5668\u4e0d\u4f1a\u6539\u53d8<code>std::shared_ptr<\/code>\u5bf9\u8c61\u7684\u5927\u5c0f\u3002\u4e0d\u7ba1\u5220\u9664\u5668\u662f\u4ec0\u4e48\uff0c\u4e00\u4e2a<code>std::shared_ptr<\/code>\u5bf9\u8c61\u90fd\u662f\u4e24\u4e2a\u6307\u9488\u5927\u5c0f\u3002\u8fd9\u662f\u4e2a\u597d\u6d88\u606f\uff0c\u4f46\u662f\u5b83\u5e94\u8be5\u8ba9\u4f60\u9690\u9690\u7ea6\u7ea6\u4e0d\u5b89\u3002\u81ea\u5b9a\u4e49\u5220\u9664\u5668\u53ef\u4ee5\u662f\u51fd\u6570\u5bf9\u8c61\uff0c\u51fd\u6570\u5bf9\u8c61\u53ef\u4ee5\u5305\u542b\u4efb\u610f\u591a\u7684\u6570\u636e\u3002\u5b83\u610f\u5473\u7740\u51fd\u6570\u5bf9\u8c61\u662f\u4efb\u610f\u5927\u7684\u3002<code>std::shared_ptr<\/code>\u600e\u4e48\u80fd\u5f15\u7528\u4e00\u4e2a\u4efb\u610f\u5927\u7684\u5220\u9664\u5668\u800c\u4e0d\u4f7f\u7528\u66f4\u591a\u7684\u5185\u5b58\uff1f<\/p>\n\n\n\n<p>\u5b83\u4e0d\u80fd\u3002\u5b83\u5fc5\u987b\u4f7f\u7528\u66f4\u591a\u7684\u5185\u5b58\u3002\u7136\u800c\uff0c\u90a3\u90e8\u5206\u5185\u5b58\u4e0d\u662f<code>std::shared_ptr<\/code>\u5bf9\u8c61\u7684\u4e00\u90e8\u5206\u3002\u90a3\u90e8\u5206\u5728\u5806\u4e0a\u9762\uff0c\u6216\u8005<code>std::shared_ptr<\/code>\u521b\u5efa\u8005\u5229\u7528<code>std::shared_ptr<\/code>\u5bf9\u81ea\u5b9a\u4e49\u5206\u914d\u5668\u7684\u652f\u6301\u80fd\u529b\uff0c\u90a3\u90e8\u5206\u5185\u5b58\u968f\u4fbf\u5728\u54ea\u90fd\u884c\u3002\u6211\u524d\u9762\u63d0\u5230\u4e86<code>std::shared_ptr<\/code>\u5bf9\u8c61\u5305\u542b\u4e86\u6240\u6307\u5bf9\u8c61\u7684\u5f15\u7528\u8ba1\u6570\u7684\u6307\u9488\u3002\u6ca1\u9519\uff0c\u4f46\u662f\u6709\u70b9\u8bef\u5bfc\u4eba\u3002\u56e0\u4e3a\u5f15\u7528\u8ba1\u6570\u662f\u53e6\u4e00\u4e2a\u66f4\u5927\u7684\u6570\u636e\u7ed3\u6784\u7684\u4e00\u90e8\u5206\uff0c\u90a3\u4e2a\u6570\u636e\u7ed3\u6784\u901a\u5e38\u53eb\u505a<strong>\u63a7\u5236\u5757<\/strong>\uff08<em>control block<\/em>\uff09\u3002\u6bcf\u4e2a<code>std::shared_ptr<\/code>\u7ba1\u7406\u7684\u5bf9\u8c61\u90fd\u6709\u4e2a\u76f8\u5e94\u7684\u63a7\u5236\u5757\u3002\u63a7\u5236\u5757\u9664\u4e86\u5305\u542b\u5f15\u7528\u8ba1\u6570\u503c\u5916\u8fd8\u6709\u4e00\u4e2a\u81ea\u5b9a\u4e49\u5220\u9664\u5668\u7684\u62f7\u8d1d\uff0c\u5f53\u7136\u524d\u63d0\u662f\u5b58\u5728\u81ea\u5b9a\u4e49\u5220\u9664\u5668\u3002\u5982\u679c\u7528\u6237\u8fd8\u6307\u5b9a\u4e86\u81ea\u5b9a\u4e49\u5206\u914d\u5668\uff0c\u63a7\u5236\u5757\u4e5f\u4f1a\u5305\u542b\u4e00\u4e2a\u5206\u914d\u5668\u7684\u62f7\u8d1d\u3002\u63a7\u5236\u5757\u53ef\u80fd\u8fd8\u5305\u542b\u4e00\u4e9b\u989d\u5916\u7684\u6570\u636e\uff0c\u6b63\u5982<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/4.SmartPointers\/item21.md\" target=\"_blank\"  rel=\"nofollow\" >Item21<\/a>\u63d0\u5230\u7684\uff0c\u4e00\u4e2a\u6b21\u7ea7\u5f15\u7528\u8ba1\u6570<em>weak count<\/em>\uff0c\u4f46\u662f\u76ee\u524d\u6211\u4eec\u5148\u5ffd\u7565\u5b83\u3002\u6211\u4eec\u53ef\u4ee5\u60f3\u8c61<code>std::shared_ptr<\/code>\u5bf9\u8c61\u5728\u5185\u5b58\u4e2d\u662f\u8fd9\u6837\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"695\" height=\"260\" src=\"https:\/\/www.gislxz.com\/wp-content\/uploads\/2024\/03\/1710225682-image.png\" alt=\"\" class=\"wp-image-1236\" srcset=\"https:\/\/www.gislxz.com\/wp-content\/uploads\/2024\/03\/1710225682-image.png 695w, https:\/\/www.gislxz.com\/wp-content\/uploads\/2024\/03\/1710225682-image-300x112.png 300w\" sizes=\"auto, (max-width: 695px) 100vw, 695px\" \/><\/figure>\n\n\n\n<p>\u5f53\u6307\u5411\u5bf9\u8c61\u7684<code>std::shared_ptr<\/code>\u4e00\u521b\u5efa\uff0c\u5bf9\u8c61\u7684\u63a7\u5236\u5757\u5c31\u5efa\u7acb\u4e86\u3002\u81f3\u5c11\u6211\u4eec\u671f\u671b\u662f\u5982\u6b64\u3002\u901a\u5e38\uff0c\u5bf9\u4e8e\u4e00\u4e2a\u521b\u5efa\u6307\u5411\u5bf9\u8c61\u7684<code>std::shared_ptr<\/code>\u7684\u51fd\u6570\u6765\u8bf4\u4e0d\u53ef\u80fd\u77e5\u9053\u662f\u5426\u6709\u5176\u4ed6<code>std::shared_ptr<\/code>\u65e9\u5df2\u6307\u5411\u90a3\u4e2a\u5bf9\u8c61\uff0c\u6240\u4ee5\u63a7\u5236\u5757\u7684\u521b\u5efa\u4f1a\u9075\u5faa\u4e0b\u9762\u51e0\u6761\u89c4\u5219\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>std::make_shared<\/code>\uff08\u53c2\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/4.SmartPointers\/item21.md\" target=\"_blank\"  rel=\"nofollow\" >Item21<\/a>\uff09\u603b\u662f\u521b\u5efa\u4e00\u4e2a\u63a7\u5236\u5757<\/strong>\u3002\u5b83\u521b\u5efa\u4e00\u4e2a\u8981\u6307\u5411\u7684\u65b0\u5bf9\u8c61\uff0c\u6240\u4ee5\u53ef\u4ee5\u80af\u5b9a<code>std::make_shared<\/code>\u8c03\u7528\u65f6\u5bf9\u8c61\u4e0d\u5b58\u5728\u5176\u4ed6\u63a7\u5236\u5757\u3002<\/li>\n\n\n\n<li><strong>\u5f53\u4ece\u72ec\u5360\u6307\u9488\uff08\u5373<code>std::unique_ptr<\/code>\u6216\u8005<code>std::auto_ptr<\/code>\uff09\u4e0a\u6784\u9020\u51fa<code>std::shared_ptr<\/code>\u65f6\u4f1a\u521b\u5efa\u63a7\u5236\u5757<\/strong>\u3002\u72ec\u5360\u6307\u9488\u6ca1\u6709\u4f7f\u7528\u63a7\u5236\u5757\uff0c\u6240\u4ee5\u6307\u9488\u6307\u5411\u7684\u5bf9\u8c61\u6ca1\u6709\u5173\u8054\u63a7\u5236\u5757\u3002\uff08\u4f5c\u4e3a\u6784\u9020\u7684\u4e00\u90e8\u5206\uff0c<code>std::shared_ptr<\/code>\u4fb5\u5360\u72ec\u5360\u6307\u9488\u6240\u6307\u5411\u7684\u5bf9\u8c61\u7684\u72ec\u5360\u6743\uff0c\u6240\u4ee5\u72ec\u5360\u6307\u9488\u88ab\u8bbe\u7f6e\u4e3anull\uff09<\/li>\n\n\n\n<li><strong>\u5f53\u4ece\u539f\u59cb\u6307\u9488\u4e0a\u6784\u9020\u51fa<code>std::shared_ptr<\/code>\u65f6\u4f1a\u521b\u5efa\u63a7\u5236\u5757<\/strong>\u3002\u5982\u679c\u4f60\u60f3\u4ece\u4e00\u4e2a\u65e9\u5df2\u5b58\u5728\u63a7\u5236\u5757\u7684\u5bf9\u8c61\u4e0a\u521b\u5efa<code>std::shared_ptr<\/code>\uff0c\u4f60\u5c06\u5047\u5b9a\u4f20\u9012\u4e00\u4e2a<code>std::shared_ptr<\/code>\u6216\u8005<code>std::weak_ptr<\/code>\uff08\u53c2\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/4.SmartPointers\/item20.md\" target=\"_blank\"  rel=\"nofollow\" >Item20<\/a>\uff09\u4f5c\u4e3a\u6784\u9020\u51fd\u6570\u5b9e\u53c2\uff0c\u800c\u4e0d\u662f\u539f\u59cb\u6307\u9488\u3002\u7528<code>std::shared_ptr<\/code>\u6216\u8005<code>std::weak_ptr<\/code>\u4f5c\u4e3a\u6784\u9020\u51fd\u6570\u5b9e\u53c2\u521b\u5efa<code>std::shared_ptr<\/code>\u4e0d\u4f1a\u521b\u5efa\u65b0\u63a7\u5236\u5757\uff0c\u56e0\u4e3a\u5b83\u53ef\u4ee5\u4f9d\u8d56\u4f20\u9012\u6765\u7684\u667a\u80fd\u6307\u9488\u6307\u5411\u63a7\u5236\u5757\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u8fd9\u4e9b\u89c4\u5219\u9020\u6210\u7684\u540e\u679c\u5c31\u662f\u4ece\u539f\u59cb\u6307\u9488\u4e0a\u6784\u9020\u8d85\u8fc7\u4e00\u4e2a<code>std::shared_ptr<\/code>\u5c31\u4f1a\u8ba9\u4f60\u8d70\u4e0a\u672a\u5b9a\u4e49\u884c\u4e3a\u7684\u5feb\u8f66\u9053\uff0c\u56e0\u4e3a\u6307\u5411\u7684\u5bf9\u8c61\u6709\u591a\u4e2a\u63a7\u5236\u5757\u5173\u8054\u3002\u591a\u4e2a\u63a7\u5236\u5757\u610f\u5473\u7740\u591a\u4e2a\u5f15\u7528\u8ba1\u6570\u503c\uff0c\u591a\u4e2a\u5f15\u7528\u8ba1\u6570\u503c\u610f\u5473\u7740\u5bf9\u8c61\u5c06\u4f1a\u88ab\u9500\u6bc1\u591a\u6b21\uff08\u6bcf\u4e2a\u5f15\u7528\u8ba1\u6570\u4e00\u6b21\uff09\u3002\u90a3\u610f\u5473\u7740\u50cf\u4e0b\u9762\u7684\u4ee3\u7801\u662f\u6709\u95ee\u9898\u7684\uff0c\u5f88\u6709\u95ee\u9898\uff0c\u95ee\u9898\u5f88\u5927\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto pw = new Widget;                           \/\/pw\u662f\u539f\u59cb\u6307\u9488\n\u2026\nstd::shared_ptr&lt;Widget&gt; spw1(pw, loggingDel);   \/\/\u4e3a*pw\u521b\u5efa\u63a7\u5236\u5757\n\u2026\nstd::shared_ptr&lt;Widget&gt; spw2(pw, loggingDel);   \/\/\u4e3a*pw\u521b\u5efa\u7b2c\u4e8c\u4e2a\u63a7\u5236\u5757<\/code><\/pre>\n\n\n\n<p>\u521b\u5efa\u539f\u59cb\u6307\u9488<code>pw<\/code>\u6307\u5411\u52a8\u6001\u5206\u914d\u7684\u5bf9\u8c61\u5f88\u7cdf\u7cd5\uff0c\u56e0\u4e3a\u5b83\u5b8c\u5168\u80cc\u79bb\u4e86\u8fd9\u7ae0\u7684\u5efa\u8bae\uff1a\u503e\u5411\u4e8e\u4f7f\u7528\u667a\u80fd\u6307\u9488\u800c\u4e0d\u662f\u539f\u59cb\u6307\u9488\u3002\uff08\u5982\u679c\u4f60\u5fd8\u8bb0\u4e86\u8be5\u5efa\u8bae\u7684\u52a8\u673a\uff0c\u8bf7\u7ffb\u5230<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/4.SmartPointers\/item18.md\" target=\"_blank\"  rel=\"nofollow\" >\u672c\u7ae0\u5f00\u5934<\/a>\uff09\u3002\u6487\u5f00\u90a3\u4e2a\u4e0d\u8bf4\uff0c\u521b\u5efa<code>pw<\/code>\u90a3\u4e00\u884c\u4ee3\u7801\u867d\u7136\u8ba9\u4eba\u538c\u6076\uff0c\u4f46\u662f\u81f3\u5c11\u4e0d\u4f1a\u9020\u6210\u672a\u5b9a\u4e49\u7a0b\u5e8f\u884c\u4e3a\u3002<\/p>\n\n\n\n<p>\u73b0\u5728\uff0c\u4f20\u7ed9<code>spw1<\/code>\u7684\u6784\u9020\u51fd\u6570\u4e00\u4e2a\u539f\u59cb\u6307\u9488\uff0c\u5b83\u4f1a\u4e3a\u6307\u5411\u7684\u5bf9\u8c61\u521b\u5efa\u4e00\u4e2a\u63a7\u5236\u5757\uff08\u56e0\u6b64\u6709\u4e2a\u5f15\u7528\u8ba1\u6570\u503c\uff09\u3002\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u6307\u5411\u7684\u5bf9\u8c61\u662f<code>*pw<\/code>\uff08\u5373<code>pw<\/code>\u6307\u5411\u7684\u5bf9\u8c61\uff09\u3002\u5c31\u5176\u672c\u8eab\u800c\u8a00\u6ca1\u4ec0\u4e48\u95ee\u9898\uff0c\u4f46\u662f\u5c06\u540c\u6837\u7684\u539f\u59cb\u6307\u9488\u4f20\u9012\u7ed9<code>spw2<\/code>\u7684\u6784\u9020\u51fd\u6570\u4f1a\u518d\u6b21\u4e3a<code>*pw<\/code>\u521b\u5efa\u4e00\u4e2a\u63a7\u5236\u5757\uff08\u6240\u4ee5\u4e5f\u6709\u4e2a\u5f15\u7528\u8ba1\u6570\u503c\uff09\u3002\u56e0\u6b64<code>*pw<\/code>\u6709\u4e24\u4e2a\u5f15\u7528\u8ba1\u6570\u503c\uff0c\u6bcf\u4e00\u4e2a\u6700\u540e\u90fd\u4f1a\u53d8\u6210\u96f6\uff0c\u7136\u540e\u6700\u7ec8\u5bfc\u81f4<code>*pw<\/code>\u9500\u6bc1\u4e24\u6b21\u3002\u7b2c\u4e8c\u4e2a\u9500\u6bc1\u4f1a\u4ea7\u751f\u672a\u5b9a\u4e49\u884c\u4e3a\u3002<\/p>\n\n\n\n<p><code>std::shared_ptr<\/code>\u7ed9\u6211\u4eec\u4e0a\u4e86\u4e24\u5802\u8bfe\u3002\u7b2c\u4e00\uff0c\u907f\u514d\u4f20\u7ed9<code>std::shared_ptr<\/code>\u6784\u9020\u51fd\u6570\u539f\u59cb\u6307\u9488\u3002\u901a\u5e38\u66ff\u4ee3\u65b9\u6848\u662f\u4f7f\u7528<code>std::make_shared<\/code>\uff08\u53c2\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/4.SmartPointers\/item21.md\" target=\"_blank\"  rel=\"nofollow\" >Item21<\/a>\uff09\uff0c\u4e0d\u8fc7\u4e0a\u9762\u4f8b\u5b50\u4e2d\uff0c\u6211\u4eec\u4f7f\u7528\u4e86\u81ea\u5b9a\u4e49\u5220\u9664\u5668\uff0c\u7528<code>std::make_shared<\/code>\u5c31\u6ca1\u529e\u6cd5\u505a\u5230\u3002\u7b2c\u4e8c\uff0c\u5982\u679c\u4f60\u5fc5\u987b\u4f20\u7ed9<code>std::shared_ptr<\/code>\u6784\u9020\u51fd\u6570\u539f\u59cb\u6307\u9488\uff0c\u76f4\u63a5\u4f20<code>new<\/code>\u51fa\u6765\u7684\u7ed3\u679c\uff0c\u4e0d\u8981\u4f20\u6307\u9488\u53d8\u91cf\u3002<\/p>\n\n\n\n<p>\u5982\u679c\u4e0a\u9762\u4ee3\u7801\u7b2c\u4e00\u90e8\u5206\u8fd9\u6837\u91cd\u5199\uff0c\u4f1a\u5c11\u4e86\u5f88\u591a\u4ece\u539f\u59cb\u6307\u9488\u4e0a\u6784\u9020\u7b2c\u4e8c\u4e2a<code>std::shared_ptr<\/code>\u7684\u8bf1\u60d1\u3002\u76f8\u5e94\u7684\uff0c\u521b\u5efa<code>spw2<\/code>\u4e5f\u4f1a\u5f88\u81ea\u7136\u7684\u7528<code>spw1<\/code>\u4f5c\u4e3a\u521d\u59cb\u5316\u53c2\u6570\uff08\u5373\u7528<code>std::shared_ptr<\/code>\u62f7\u8d1d\u6784\u9020\u51fd\u6570\uff09\uff0c\u90a3\u5c31\u6ca1\u4ec0\u4e48\u95ee\u9898\u4e86\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::shared_ptr&lt;Widget&gt; spw1(new Widget,    \/\/\u76f4\u63a5\u4f7f\u7528new\u7684\u7ed3\u679c\n                             loggingDel);\nstd::shared_ptr&lt;Widget&gt; spw2(spw1);         \/\/spw2\u4f7f\u7528spw1\u4e00\u6837\u7684\u63a7\u5236\u5757<\/code><\/pre>\n\n\n\n<p>\u4e00\u4e2a\u5c24\u5176\u4ee4\u4eba\u610f\u5916\u7684\u5730\u65b9\u662f\u4f7f\u7528<code>this<\/code>\u6307\u9488\u4f5c\u4e3a<code>std::shared_ptr<\/code>\u6784\u9020\u51fd\u6570\u5b9e\u53c2\u7684\u65f6\u5019\u53ef\u80fd\u5bfc\u81f4\u521b\u5efa\u591a\u4e2a\u63a7\u5236\u5757\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e\u4e8c\u5341\uff1a\u5f53<code>std::shared_ptr<\/code>\u53ef\u80fd\u60ac\u7a7a\u65f6\u4f7f\u7528<code>std::weak_ptr<\/code><\/h3>\n\n\n\n<p>\u81ea\u76f8\u77db\u76fe\u7684\u662f\uff0c\u5982\u679c\u6709\u4e00\u4e2a\u50cf<code>std::shared_ptr<\/code>\uff08\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/4.SmartPointers\/item19.md\" target=\"_blank\"  rel=\"nofollow\" >Item19<\/a>\uff09\u7684\u4f46\u662f\u4e0d\u53c2\u4e0e\u8d44\u6e90\u6240\u6709\u6743\u5171\u4eab\u7684\u6307\u9488\u662f\u5f88\u65b9\u4fbf\u7684\u3002\u6362\u53e5\u8bdd\u8bf4\uff0c\u662f\u4e00\u4e2a\u7c7b\u4f3c<code>std::shared_ptr<\/code>\u4f46\u4e0d\u5f71\u54cd\u5bf9\u8c61\u5f15\u7528\u8ba1\u6570\u7684\u6307\u9488\u3002\u8fd9\u79cd\u7c7b\u578b\u7684\u667a\u80fd\u6307\u9488\u5fc5\u987b\u8981\u89e3\u51b3\u4e00\u4e2a<code>std::shared_ptr<\/code>\u4e0d\u5b58\u5728\u7684\u95ee\u9898\uff1a\u53ef\u80fd\u6307\u5411\u5df2\u7ecf\u9500\u6bc1\u7684\u5bf9\u8c61\u3002\u4e00\u4e2a\u771f\u6b63\u7684\u667a\u80fd\u6307\u9488\u5e94\u8be5\u8ddf\u8e2a\u6240\u6307\u5bf9\u8c61\uff0c\u5728\u60ac\u7a7a\u65f6\u77e5\u6653\uff0c\u60ac\u7a7a\uff08<em>dangle<\/em>\uff09\u5c31\u662f\u6307\u9488\u6307\u5411\u7684\u5bf9\u8c61\u4e0d\u518d\u5b58\u5728\u3002\u8fd9\u5c31\u662f\u5bf9<code>std::weak_ptr<\/code>\u6700\u7cbe\u786e\u7684\u63cf\u8ff0\u3002<\/p>\n\n\n\n<p>\u4f60\u53ef\u80fd\u60f3\u77e5\u9053\u4ec0\u4e48\u65f6\u5019\u8be5\u7528<code>std::weak_ptr<\/code>\u3002\u4f60\u53ef\u80fd\u60f3\u77e5\u9053\u5173\u4e8e<code>std::weak_ptr<\/code>&nbsp;API\u7684\u66f4\u591a\u3002\u5b83\u4ec0\u4e48\u90fd\u597d\u9664\u4e86\u4e0d\u592a\u667a\u80fd\u3002<code>std::weak_ptr<\/code>\u4e0d\u80fd\u89e3\u5f15\u7528\uff0c\u4e5f\u4e0d\u80fd\u6d4b\u8bd5\u662f\u5426\u4e3a\u7a7a\u503c\u3002\u56e0\u4e3a<code>std::weak_ptr<\/code>\u4e0d\u662f\u4e00\u4e2a\u72ec\u7acb\u7684\u667a\u80fd\u6307\u9488\u3002\u5b83\u662f<code>std::shared_ptr<\/code>\u7684\u589e\u5f3a\u3002<\/p>\n\n\n\n<p>\u8fd9\u79cd\u5173\u7cfb\u5728\u5b83\u521b\u5efa\u4e4b\u65f6\u5c31\u5efa\u7acb\u4e86\u3002<code>std::weak_ptr<\/code>\u901a\u5e38\u4ece<code>std::shared_ptr<\/code>\u4e0a\u521b\u5efa\u3002\u5f53\u4ece<code>std::shared_ptr<\/code>\u4e0a\u521b\u5efa<code>std::weak_ptr<\/code>\u65f6\u4e24\u8005\u6307\u5411\u76f8\u540c\u7684\u5bf9\u8c61\uff0c\u4f46\u662f<code>std::weak_ptr<\/code>\u4e0d\u4f1a\u5f71\u54cd\u6240\u6307\u5bf9\u8c61\u7684\u5f15\u7528\u8ba1\u6570\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>auto spw =                      \/\/spw\u521b\u5efa\u4e4b\u540e\uff0c\u6307\u5411\u7684Widget\u7684\n    std::make_shared&lt;Widget&gt;(); \/\/\u5f15\u7528\u8ba1\u6570\uff08ref count\uff0cRC\uff09\u4e3a1\u3002\n                                \/\/std::make_shared\u7684\u4fe1\u606f\u53c2\u89c1\u6761\u6b3e21\n\u2026\nstd::weak_ptr&lt;Widget&gt; wpw(spw); \/\/wpw\u6307\u5411\u4e0espw\u6240\u6307\u76f8\u540c\u7684Widget\u3002RC\u4ecd\u4e3a1\n\u2026\nspw = nullptr;                  \/\/RC\u53d8\u4e3a0\uff0cWidget\u88ab\u9500\u6bc1\u3002\n                                \/\/wpw\u73b0\u5728\u60ac\u7a7a\n\/\/\u60ac\u7a7a\u7684std::weak_ptr\u88ab\u79f0\u4f5c\u5df2\u7ecfexpired\uff08\u8fc7\u671f\uff09\nif (wpw.expired()) \u2026            \/\/\u5982\u679cwpw\u6ca1\u6709\u6307\u5411\u5bf9\u8c61\u2026<\/code><\/pre>\n\n\n\n<p>\u4f46\u662f\u901a\u5e38\u4f60\u671f\u671b\u7684\u662f\u68c0\u67e5<code>std::weak_ptr<\/code>\u662f\u5426\u5df2\u7ecf\u8fc7\u671f\uff0c\u5982\u679c\u6ca1\u6709\u8fc7\u671f\u5219\u8bbf\u95ee\u5176\u6307\u5411\u7684\u5bf9\u8c61\u3002\u8fd9\u505a\u8d77\u6765\u53ef\u4e0d\u662f\u60f3\u7740\u90a3\u4e48\u7b80\u5355\u3002\u56e0\u4e3a\u7f3a\u5c11\u89e3\u5f15\u7528\u64cd\u4f5c\uff0c\u6ca1\u6709\u529e\u6cd5\u5199\u8fd9\u6837\u7684\u4ee3\u7801\u3002\u5373\u4f7f\u6709\uff0c\u5c06\u68c0\u67e5\u548c\u89e3\u5f15\u7528\u5206\u5f00\u4f1a\u5f15\u5165\u7ade\u6001\u6761\u4ef6\uff1a\u5728\u8c03\u7528<code>expired<\/code>\u548c\u89e3\u5f15\u7528\u64cd\u4f5c\u4e4b\u95f4\uff0c\u53e6\u4e00\u4e2a\u7ebf\u7a0b\u53ef\u80fd\u5bf9\u6307\u5411\u8fd9\u5bf9\u8c61\u7684<code>std::shared_ptr<\/code>\u91cd\u65b0\u8d4b\u503c\u6216\u8005\u6790\u6784\uff0c\u5e76\u7531\u6b64\u9020\u6210\u5bf9\u8c61\u5df2\u6790\u6784\u3002\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u4f60\u7684\u89e3\u5f15\u7528\u5c06\u4f1a\u4ea7\u751f\u672a\u5b9a\u4e49\u884c\u4e3a\u3002<\/p>\n\n\n\n<p>\u4f60\u9700\u8981\u7684\u662f\u4e00\u4e2a\u539f\u5b50\u64cd\u4f5c\u68c0\u67e5<code>std::weak_ptr<\/code>\u662f\u5426\u5df2\u7ecf\u8fc7\u671f\uff0c\u5982\u679c\u6ca1\u6709\u8fc7\u671f\u5c31\u8bbf\u95ee\u6240\u6307\u5bf9\u8c61\u3002\u8fd9\u53ef\u4ee5\u901a\u8fc7\u4ece<code>std::weak_ptr<\/code>\u521b\u5efa<code>std::shared_ptr<\/code>\u6765\u5b9e\u73b0\uff0c\u5177\u4f53\u6709\u4e24\u79cd\u5f62\u5f0f\u53ef\u4ee5\u4ece<code>std::weak_ptr<\/code>\u4e0a\u521b\u5efa<code>std::shared_ptr<\/code>\uff0c\u5177\u4f53\u7528\u54ea\u79cd\u53d6\u51b3\u4e8e<code>std::weak_ptr<\/code>\u8fc7\u671f\u65f6\u4f60\u5e0c\u671b<code>std::shared_ptr<\/code>\u8868\u73b0\u51fa\u4ec0\u4e48\u884c\u4e3a\u3002\u4e00\u79cd\u5f62\u5f0f\u662f<code>std::weak_ptr::lock<\/code>\uff0c\u5b83\u8fd4\u56de\u4e00\u4e2a<code>std::shared_ptr<\/code>\uff0c\u5982\u679c<code>std::weak_ptr<\/code>\u8fc7\u671f\u8fd9\u4e2a<code>std::shared_ptr<\/code>\u4e3a\u7a7a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::shared_ptr&lt;Widget&gt; spw1 = wpw.lock();  \/\/\u5982\u679cwpw\u8fc7\u671f\uff0cspw1\u5c31\u4e3a\u7a7a\n \t\t\t\t\t\t\t\t\t\t\t\nauto spw2 = wpw.lock();                     \/\/\u540c\u4e0a\uff0c\u4f46\u662f\u4f7f\u7528auto<\/code><\/pre>\n\n\n\n<p>\u53e6\u4e00\u79cd\u5f62\u5f0f\u662f\u4ee5<code>std::weak_ptr<\/code>\u4e3a\u5b9e\u53c2\u6784\u9020<code>std::shared_ptr<\/code>\u3002\u8fd9\u79cd\u60c5\u51b5\u4e2d\uff0c\u5982\u679c<code>std::weak_ptr<\/code>\u8fc7\u671f\uff0c\u4f1a\u629b\u51fa\u4e00\u4e2a\u5f02\u5e38\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>std::shared_ptr&lt;Widget&gt; spw3(wpw);          \/\/\u5982\u679cwpw\u8fc7\u671f\uff0c\u629b\u51fastd::bad_weak_ptr\u5f02\u5e38<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e\u4e8c\u5341\u4e00\uff1a\u4f18\u5148\u8003\u8651\u4f7f\u7528<code>std::make_unique<\/code>\u548c<code>std::make_shared<\/code>\uff0c\u800c\u975e\u76f4\u63a5\u4f7f\u7528<code>new<\/code><\/h3>\n\n\n\n<p>std::shared_ptr&lt;Widget&gt; spw(new Widget);\u9700\u8981\u4fe9\u6b21\u5185\u5b58\u5206\u914d\uff0c\u4e14\u4e2d\u95f4\u88ab\u6253\u65ad\u5c31\u4f1a\u6cc4\u9732\u3002<\/p>\n\n\n\n<p>\u66f4\u503e\u5411\u4e8e\u4f7f\u7528<code>make<\/code>\u51fd\u6570\u800c\u4e0d\u662f\u76f4\u63a5\u4f7f\u7528<code>new<\/code>\u7684\u4e89\u8bba\u975e\u5e38\u6fc0\u70c8\u3002\u5c3d\u7ba1\u5b83\u4eec\u5728\u8f6f\u4ef6\u5de5\u7a0b\u3001\u5f02\u5e38\u5b89\u5168\u548c\u6548\u7387\u65b9\u9762\u5177\u6709\u4f18\u52bf\uff0c\u4f46\u672c\u6761\u6b3e\u7684\u5efa\u8bae\u662f\uff0c\u66f4<strong>\u503e\u5411\u4e8e<\/strong>\u4f7f\u7528<code>make<\/code>\u51fd\u6570\uff0c\u800c\u4e0d\u662f\u5b8c\u5168\u4f9d\u8d56\u4e8e\u5b83\u4eec\u3002\u8fd9\u662f\u56e0\u4e3a\u6709\u4e9b\u60c5\u51b5\u4e0b\u5b83\u4eec\u4e0d\u80fd\u6216\u4e0d\u5e94\u8be5\u88ab\u4f7f\u7528\u3002<\/p>\n\n\n\n<p>\u4f8b\u5982\uff0c<code>make<\/code>\u51fd\u6570\u90fd\u4e0d\u5141\u8bb8\u6307\u5b9a\u81ea\u5b9a\u4e49\u5220\u9664\u5668\uff08\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/4.SmartPointers\/item18.md\" target=\"_blank\"  rel=\"nofollow\" >Item18<\/a>\u548c<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/4.SmartPointers\/item19.md\" target=\"_blank\"  rel=\"nofollow\" >19<\/a>\uff09\uff0c\u4f46\u662f<code>std::unique_ptr<\/code>\u548c<code>std::shared_ptr<\/code>\u6709\u6784\u9020\u51fd\u6570\u8fd9\u4e48\u505a\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e\u4e8c\u5341\u4e8c\uff1a\u5f53\u4f7f\u7528Pimpl\u60ef\u7528\u6cd5\uff0c\u8bf7\u5728\u5b9e\u73b0\u6587\u4ef6\u4e2d\u5b9a\u4e49\u7279\u6b8a\u6210\u5458\u51fd\u6570<\/h3>\n\n\n\n<h2 class=\"wp-block-heading\">\u7b2c5\u7ae0 \u53f3\u503c\u5f15\u7528\uff0c\u79fb\u52a8\u8bed\u4e49\uff0c\u5b8c\u7f8e\u8f6c\u53d1<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e\u4e8c\u5341\u4e09\uff1a\u7406\u89e3<code>std::move<\/code>\u548c<code>std::forward<\/code><\/h3>\n\n\n\n<p><a href=\"https:\/\/blog.csdn.net\/slslslyxz\/article\/details\/105778734\" target=\"_blank\"  rel=\"nofollow\" >remove_reference(\u5f15\u7528\u79fb\u9664)-CSDN\u535a\u5ba2<\/a><\/p>\n\n\n\n<p>\u7b2c\u4e00\uff0c\u4e0d\u8981\u5728\u4f60\u5e0c\u671b\u80fd\u79fb\u52a8\u5bf9\u8c61\u7684\u65f6\u5019\uff0c\u58f0\u660e\u4ed6\u4eec\u4e3a<code>const<\/code>\u3002\u5bf9<code>const<\/code>\u5bf9\u8c61\u7684\u79fb\u52a8\u8bf7\u6c42\u4f1a\u6084\u65e0\u58f0\u606f\u7684\u88ab\u8f6c\u5316\u4e3a\u62f7\u8d1d\u64cd\u4f5c\u3002\u7b2c\u4e8c\u70b9\uff0c<code>std::move<\/code>\u4e0d\u4ec5\u4e0d\u79fb\u52a8\u4efb\u4f55\u4e1c\u897f\uff0c\u800c\u4e14\u5b83\u4e5f\u4e0d\u4fdd\u8bc1\u5b83\u6267\u884c\u8f6c\u6362\u7684\u5bf9\u8c61\u53ef\u4ee5\u88ab\u79fb\u52a8\u3002\u5173\u4e8e<code>std::move<\/code>\uff0c\u4f60\u80fd\u786e\u4fdd\u7684\u552f\u4e00\u4e00\u4ef6\u4e8b\u5c31\u662f\u5c06\u5b83\u5e94\u7528\u5230\u4e00\u4e2a\u5bf9\u8c61\u4e0a\uff0c\u4f60\u80fd\u591f\u5f97\u5230\u4e00\u4e2a\u53f3\u503c\u3002<\/p>\n\n\n\n<p>\u5173\u4e8e<code>std::forward<\/code>\u7684\u6545\u4e8b\u4e0e<code>std::move<\/code>\u662f\u76f8\u4f3c\u7684\uff0c\u4f46\u662f\u4e0e<code>std::move<\/code>\u603b\u662f<strong>\u65e0\u6761\u4ef6<\/strong>\u7684\u5c06\u5b83\u7684\u5b9e\u53c2\u4e3a\u53f3\u503c\u4e0d\u540c\uff0c<code>std::forward<\/code>\u53ea\u6709\u5728\u6ee1\u8db3\u4e00\u5b9a\u6761\u4ef6\u7684\u60c5\u51b5\u4e0b\u624d\u6267\u884c\u8f6c\u6362\u3002<code>std::forward<\/code>\u662f<strong>\u6709\u6761\u4ef6<\/strong>\u7684\u8f6c\u6362\u3002\u8981\u660e\u767d\u4ec0\u4e48\u65f6\u5019\u5b83\u6267\u884c\u8f6c\u6362\uff0c\u4ec0\u4e48\u65f6\u5019\u4e0d\uff0c\u60f3\u60f3<code>std::forward<\/code>\u7684\u5178\u578b\u7528\u6cd5\u3002\u6700\u5e38\u89c1\u7684\u60c5\u666f\u662f\u4e00\u4e2a\u6a21\u677f\u51fd\u6570\uff0c\u63a5\u6536\u4e00\u4e2a\u901a\u7528\u5f15\u7528\u5f62\u53c2\uff0c\u5e76\u5c06\u5b83\u4f20\u9012\u7ed9\u53e6\u5916\u7684\u51fd\u6570\u3002<\/p>\n\n\n\n<p>move\u4e0eforward\u7684\u533a\u522b\uff1f<\/p>\n\n\n\n<p>\u6ce8\u610f\uff0c\u7b2c\u4e00\uff0c<code>std::move<\/code>\u53ea\u9700\u8981\u4e00\u4e2a\u51fd\u6570\u5b9e\u53c2\uff08<code>rhs.s<\/code>\uff09\uff0c\u800c<code>std::forward<\/code>\u4e0d\u4f46\u9700\u8981\u4e00\u4e2a\u51fd\u6570\u5b9e\u53c2\uff08<code>rhs.s<\/code>\uff09\uff0c\u8fd8\u9700\u8981\u4e00\u4e2a\u6a21\u677f\u7c7b\u578b\u5b9e\u53c2<code>std::string<\/code>\u3002\u5176\u6b21\uff0c\u6211\u4eec\u4f20\u9012\u7ed9<code>std::forward<\/code>\u7684\u7c7b\u578b\u5e94\u5f53\u662f\u4e00\u4e2anon-reference\uff0c\u56e0\u4e3a\u60ef\u4f8b\u662f\u4f20\u9012\u7684\u5b9e\u53c2\u5e94\u8be5\u662f\u4e00\u4e2a\u53f3\u503c\uff08\u89c1<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/5.RRefMovSemPerfForw\/item28.md\" target=\"_blank\"  rel=\"nofollow\" >Item28<\/a>\uff09\u3002\u540c\u6837\uff0c\u8fd9\u610f\u5473\u7740<code>std::move<\/code>\u6bd4\u8d77<code>std::forward<\/code>\u6765\u8bf4\u9700\u8981\u6253\u66f4\u5c11\u7684\u5b57\uff0c\u5e76\u4e14\u514d\u53bb\u4e86\u4f20\u9012\u4e00\u4e2a\u8868\u793a\u6211\u4eec\u6b63\u5728\u4f20\u9012\u4e00\u4e2a\u53f3\u503c\u7684\u7c7b\u578b\u5b9e\u53c2\u3002\u540c\u6837\uff0c\u5b83\u6839\u7edd\u4e86\u6211\u4eec\u4f20\u9012\u9519\u8bef\u7c7b\u578b\u7684\u53ef\u80fd\u6027\uff08\u4f8b\u5982\uff0c<code>std::string&amp;<\/code>\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u6210\u5458<code>s<\/code>\u88ab\u590d\u5236\u800c\u4e0d\u662f\u88ab\u79fb\u52a8\u6784\u9020\uff09\u3002<\/p>\n\n\n\n<p>\u66f4\u91cd\u8981\u7684\u662f\uff0c<code>std::move<\/code>\u7684\u4f7f\u7528\u4ee3\u8868\u7740\u65e0\u6761\u4ef6\u5411\u53f3\u503c\u7684\u8f6c\u6362\uff0c\u800c\u4f7f\u7528<code>std::forward<\/code>\u53ea\u5bf9\u7ed1\u5b9a\u4e86\u53f3\u503c\u7684\u5f15\u7528\u8fdb\u884c\u5230\u53f3\u503c\u8f6c\u6362\u3002\u8fd9\u662f\u4e24\u79cd\u5b8c\u5168\u4e0d\u540c\u7684\u52a8\u4f5c\u3002\u524d\u8005\u662f\u5178\u578b\u5730\u4e3a\u4e86\u79fb\u52a8\u64cd\u4f5c\uff0c\u800c\u540e\u8005\u53ea\u662f\u4f20\u9012\uff08\u4ea6\u4e3a\u8f6c\u53d1\uff09\u4e00\u4e2a\u5bf9\u8c61\u5230\u53e6\u5916\u4e00\u4e2a\u51fd\u6570\uff0c\u4fdd\u7559\u5b83\u539f\u6709\u7684\u5de6\u503c\u5c5e\u6027\u6216\u53f3\u503c\u5c5e\u6027\u3002\u56e0\u4e3a\u8fd9\u4e9b\u52a8\u4f5c\u5b9e\u5728\u662f\u5dee\u5f02\u592a\u5927\uff0c\u6240\u4ee5\u6211\u4eec\u62e5\u6709\u4e24\u4e2a\u4e0d\u540c\u7684\u51fd\u6570\uff08\u4ee5\u53ca\u51fd\u6570\u540d\uff09\u6765\u533a\u5206\u8fd9\u4e9b\u52a8\u4f5c\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e\u4e8c\u5341\u56db\uff1a\u533a\u5206\u901a\u7528\u5f15\u7528\u4e0e\u53f3\u503c\u5f15\u7528<\/h3>\n\n\n\n<p>\u6ce8\u610f\u7279\u6b8a\u60c5\u51b5\u7684\u533a\u5206<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"> \u6761\u6b3e\u4e8c\u5341\u4e94\uff1a\u5bf9\u53f3\u503c\u5f15\u7528\u4f7f\u7528<code>std::move<\/code>\uff0c\u5bf9\u901a\u7528\u5f15\u7528\u4f7f\u7528<code>std::forward<\/code><\/h3>\n\n\n\n<p>\u6ce8\u610fRVO\u7684\u7279\u6b8a\u60c5\u51b5<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e\u4e8c\u5341\u516d\uff1a\u907f\u514d\u5728\u901a\u7528\u5f15\u7528\u4e0a\u91cd\u8f7d<\/h3>\n\n\n\n<p>\u4f7f\u7528\u901a\u7528\u5f15\u7528\u7684\u51fd\u6570\u5728C++\u4e2d\u662f\u6700\u8d2a\u5a6a\u7684\u51fd\u6570\u3002\u5b83\u4eec\u51e0\u4e4e\u53ef\u4ee5\u7cbe\u786e\u5339\u914d\u4efb\u4f55\u7c7b\u578b\u7684\u5b9e\u53c2\uff08\u6781\u5c11\u4e0d\u9002\u7528\u7684\u5b9e\u53c2\u5728<a href=\"https:\/\/github.com\/CnTransGroup\/EffectiveModernCppChinese\/blob\/master\/src\/5.RRefMovSemPerfForw\/item30.md\" target=\"_blank\"  rel=\"nofollow\" >Item30<\/a>\u4e2d\u4ecb\u7ecd\uff09\u3002\u8fd9\u4e5f\u662f\u628a\u91cd\u8f7d\u548c\u901a\u7528\u5f15\u7528\u7ec4\u5408\u5728\u4e00\u5757\u662f\u7cdf\u7cd5\u4e3b\u610f\u7684\u539f\u56e0\uff1a\u901a\u7528\u5f15\u7528\u7684\u5b9e\u73b0\u4f1a\u5339\u914d\u6bd4\u5f00\u53d1\u8005\u9884\u671f\u8981\u591a\u5f97\u591a\u7684\u5b9e\u53c2\u7c7b\u578b\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u6761\u6b3e\u4e8c\u5341\u4e03\uff1a\u719f\u6089\u901a\u7528\u5f15\u7528\u91cd\u8f7d\u7684\u66ff\u4ee3\u65b9\u6cd5<\/h3>\n\n\n\n<p><em>tag dispatch<\/em>\u7684\u5173\u952e\u662f\u5b58\u5728\u5355\u72ec\u4e00\u4e2a\u51fd\u6570\uff08\u6ca1\u6709\u91cd\u8f7d\uff09\u7ed9\u5ba2\u6237\u7aefAPI\u3002\u8fd9\u4e2a\u5355\u72ec\u7684\u51fd\u6570\u5206\u53d1\u7ed9\u5177\u4f53\u7684\u5b9e\u73b0\u51fd\u6570\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GitHub &#8211; CnTransGroup\/EffectiveModernCppChinese: \u300aEffective Moder &#823","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-1014","post","type-post","status-publish","format-standard","hentry","category-4"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/posts\/1014","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/comments?post=1014"}],"version-history":[{"count":17,"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/posts\/1014\/revisions"}],"predecessor-version":[{"id":1250,"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/posts\/1014\/revisions\/1250"}],"wp:attachment":[{"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/media?parent=1014"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/categories?post=1014"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gislxz.com\/index.php\/wp-json\/wp\/v2\/tags?post=1014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}