{"id":9115,"date":"2023-02-17T23:33:35","date_gmt":"2023-02-17T15:33:35","guid":{"rendered":"https:\/\/blog.iyatt.com\/?p=9115"},"modified":"2024-05-05T14:18:23","modified_gmt":"2024-05-05T06:18:23","slug":"c-%e6%b3%9b%e5%9e%8b%e7%bc%96%e7%a8%8b%e5%9f%ba%e7%a1%80%ef%bc%88%e7%bc%96%e8%be%91%e4%b8%ad%ef%bc%89","status":"publish","type":"post","link":"https:\/\/blog.iyatt.com\/?p=9115","title":{"rendered":"C++ \u6cdb\u578b\u7f16\u7a0b\u57fa\u7840"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-light-blue ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title ez-toc-toggle\" style=\"cursor:pointer\">\u76ee\u5f55<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blog.iyatt.com\/?p=9115\/#%E7%8E%AF%E5%A2%83\" >\u73af\u5883<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blog.iyatt.com\/?p=9115\/#%E5%87%BD%E6%95%B0%E6%A8%A1%E6%9D%BF\" >\u51fd\u6570\u6a21\u677f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blog.iyatt.com\/?p=9115\/#%E9%9A%90%E5%BC%8F%E8%BD%AC%E6%8D%A2\" >\u9690\u5f0f\u8f6c\u6362<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blog.iyatt.com\/?p=9115\/#%E4%BC%98%E5%85%88%E9%A1%BA%E5%BA%8F\" >\u4f18\u5148\u987a\u5e8f<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blog.iyatt.com\/?p=9115\/#%E7%B1%BB%E6%A8%A1%E6%9D%BF\" >\u7c7b\u6a21\u677f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blog.iyatt.com\/?p=9115\/#%E7%B1%BB%E6%A8%A1%E6%9D%BF%E5%AF%B9%E8%B1%A1%E5%81%9A%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0\" >\u7c7b\u6a21\u677f\u5bf9\u8c61\u505a\u51fd\u6570\u53c2\u6570<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blog.iyatt.com\/?p=9115\/#%E7%B1%BB%E6%A8%A1%E6%9D%BF%E7%BB%A7%E6%89%BF\" >\u7c7b\u6a21\u677f\u7ee7\u627f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blog.iyatt.com\/?p=9115\/#%E7%B1%BB%E6%A8%A1%E6%9D%BF%E6%88%90%E5%91%98%E5%87%BD%E6%95%B0%E7%B1%BB%E5%A4%96%E5%AE%9E%E7%8E%B0\" >\u7c7b\u6a21\u677f\u6210\u5458\u51fd\u6570\u7c7b\u5916\u5b9e\u73b0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blog.iyatt.com\/?p=9115\/#%E7%B1%BB%E6%A8%A1%E6%9D%BF%E5%8F%8B%E5%85%83\" >\u7c7b\u6a21\u677f\u53cb\u5143<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blog.iyatt.com\/?p=9115\/#%E4%BB%BF_vector\" >\u4eff vector<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%E7%8E%AF%E5%A2%83\"><\/span>\u73af\u5883<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Debian 11 \uff08arm64)<\/p>\n<p>\u7f16\u8bd1\u5668 g++ 10.2.1\uff1b\u7f16\u8bd1\u6807\u51c6 C++20\uff1b\u53c2\u6570\uff1a-std=c++20 -no-pie -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Werror=format-security -Wextra -pedantic -Wimplicit-fallthrough -Wsequence-point -Wswitch-unreachable -Wswitch-enum -Wstringop-truncation -Wbool-compare -Wtautological-compare -Wfloat-equal -Wshadow=global -Wpointer-arith -Wpointer-compare -Wcast-align -Wcast-qual -Wwrite-strings -Wdangling-else -Wlogical-op -Wconversion -g -O0<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%E5%87%BD%E6%95%B0%E6%A8%A1%E6%9D%BF\"><\/span>\u51fd\u6570\u6a21\u677f<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u6a21\u677f\u7684\u4f5c\u7528\uff0c\u8fd9\u91cc\u4e3e\u4e00\u4e2a\u4f8b\u5b50\u6765\u8bf4\u660e\u3002\u5047\u5982\u8fd9\u91cc\u6211\u8981\u5199\u6570\u636e\u4ea4\u6362\u7684\u51fd\u6570\uff0c\u90a3\u4e48\u9488\u5bf9\u4e0d\u540c\u6570\u636e\u7c7b\u578b\u90fd\u8981\u53bb\u5199\u4e00\u4e2a\u5b9e\u73b0\uff0c\u800c\u4f7f\u7528\u6a21\u677f\uff0c\u5219\u53ea\u7528\u4e00\u4e2a\u51fd\u6570\u53ef\u4ee5\u505a\u5230\u6240\u6709\u6570\u636e\u7c7b\u578b\u7684\u4ea4\u6362\u3002<\/p>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n\ntemplate&lt;typename T&gt;\nvoid swap(T &amp;data1, T &amp;data2)\n{\n    T tmp = data1;\n    data1 = data2;\n    data2 = tmp;\n}\n\nint main()\n{\n    int num1 = 8;\n    int num2 = 9;\n    swap(num1, num2);\n    std::cout &lt;&lt; num1 &lt;&lt; &quot; &quot; &lt;&lt; num2 &lt;&lt; std::endl;\n\n    std::string s1 = &quot;AB&quot;;\n    std::string s2 = &quot;ba&quot;;\n    swap(s1, s2);\n    std::cout &lt;&lt; s1 &lt;&lt; &quot; &quot; &lt;&lt; s2 &lt;&lt; std::endl;\n\n    double f1 = 2.1;\n    double f2 = 3.4;\n    swap(f1, f2);\n    std::cout &lt;&lt; f1 &lt;&lt; &quot; &quot; &lt;&lt; f2 &lt;&lt; std::endl;\n\n    char c1 = &#039;A&#039;;\n    char c2 = &#039;B&#039;;\n    swap(c1, c2);\n    std::cout &lt;&lt; c1 &lt;&lt; &quot; &quot; &lt;&lt; c2 &lt;&lt; std::endl;\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/02\/image-1676639783586.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 165px; --smush-placeholder-aspect-ratio: 165\/151;\" \/><\/p>\n<p>\u4ee3\u7801\u793a\u4f8b\u4e2d\u5199\u7684 <code>template &lt;typename T&gt;<\/code>\uff0cT \u5c31\u7528\u4e8e\u4ee3\u8868\u4efb\u610f\u6570\u636e\u7c7b\u578b\uff0c\u53ef\u4ee5\u81ea\u547d\u540d\uff0c\u5982\u4e0b\u56fe\uff0c\u53ea\u662f\u4e00\u822c\u4e60\u60ef\u5199 T<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/02\/image-1676639961423.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 421px; --smush-placeholder-aspect-ratio: 421\/151;\" \/><\/p>\n<p>\u5728\u4f7f\u7528\u6a21\u677f\u65f6\uff0cT \u5fc5\u987b\u662f\u786e\u5b9a\u7684\u7c7b\u578b\uff0c\u6bd4\u5982\u4e0b\u9762\u7684\u4f8b\u5b50\uff0c\u5982\u679c\u53c2\u6570\u6ca1\u6709\u4f7f\u7528 T\uff0c\u5c31\u4e0d\u80fd\u901a\u8fc7\u4f20\u5165\u53c2\u6570\u6765\u63a8\u5bfc\u51fa T \u7684\u7c7b\u578b\uff0c\u6b64\u65f6\u5c31\u5fc5\u987b\u5728\u8c03\u7528\u65f6\u6307\u5b9a T \u7684\u7c7b\u578b\u3002<\/p>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n\ntemplate&lt;typename T&gt;\nvoid func()\n{\n    std::cout &lt;&lt; sizeof(T) &lt;&lt; std::endl;\n}\n\nint main()\n{\n    func&lt;char&gt;();\n    func&lt;int&gt;();\n    func&lt;double&gt;();\n    func&lt;std::string&gt;();\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/02\/image-1676641071147.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 163px; --smush-placeholder-aspect-ratio: 163\/158;\" \/><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%E9%9A%90%E5%BC%8F%E8%BD%AC%E6%8D%A2\"><\/span>\u9690\u5f0f\u8f6c\u6362<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u666e\u901a\u51fd\u6570\u53ef\u4ee5\u53d1\u751f\u9690\u5f0f\u8f6c\u6362\uff0c\u6bd4\u5982<\/p>\n<p>\u51fd\u6570\u7684\u53c2\u6570\u90fd\u662f double\uff0c\u6211\u4f20\u5165\u7684\u4e00\u4e2a\u662f int\uff0c\u53e6\u4e00\u4e2a\u662f float\uff0c\u5b9e\u9645\u90fd\u4f1a\u53d1\u751f\u9690\u5f0f\u8f6c\u6362\uff0c\u53d8\u4e3a double \u518d\u8fdb\u884c\u8ba1\u7b97<\/p>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n\ndouble add(double num1, double num2)\n{\n    return num1 + num2;\n}\n\nint main()\n{\n    int a = 8;\n    float b = 2.4f;\n    std::cout &lt;&lt; add(a, b) &lt;&lt; std::endl;\n}<\/code><\/pre>\n<p>\u800c\u51fd\u6570\u6a21\u677f\u5219\u4e0d\u884c<\/p>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n\ntemplate&lt;typename T&gt;\ndouble add(T num1, T num2)\n{\n    return num1 + num2;\n}\n\nint main()\n{\n    int a = 8;\n    float b = 2.4f;\n    std::cout &lt;&lt; add(a, b) &lt;&lt; std::endl;\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/02\/image-1676642743344.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 509px; --smush-placeholder-aspect-ratio: 509\/210;\" \/><\/p>\n<p>\u9664\u975e\u8c03\u7528\u65f6\u6307\u5b9a T \u7684\u7c7b\u578b<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/02\/image-1676642814817.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 159px; --smush-placeholder-aspect-ratio: 159\/85;\" \/><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%E4%BC%98%E5%85%88%E9%A1%BA%E5%BA%8F\"><\/span>\u4f18\u5148\u987a\u5e8f<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u5f53\u540c\u65f6\u5b58\u5728\u666e\u901a\u51fd\u6570\u548c\u51fd\u6570\u6a21\u677f\u5339\u914d\u65f6\uff0c\u4f1a\u4f18\u5148\u8c03\u7528\u666e\u901a\u51fd\u6570<\/p>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n\ntemplate&lt;typename T&gt;\nT add(T num1, T num2)\n{\n    std::cout &lt;&lt; &quot;\u51fd\u6570\u6a21\u677f&quot; &lt;&lt; std::endl;\n    return num1 + num2;\n}\n\nint add(int num1, int num2)\n{\n    std::cout &lt;&lt; &quot;\u666e\u901a\u51fd\u6570&quot; &lt;&lt; std::endl;\n    return num1 + num2;\n}\n\nint main()\n{\n    add(8, 9);\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/02\/image-1676643151864.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 137px; --smush-placeholder-aspect-ratio: 137\/107;\" \/><\/p>\n<p>\u5982\u679c\u8981\u5f3a\u5236\u8c03\u7528\u51fd\u6570\u6a21\u677f\uff0c\u5219\u9700\u8981\u4f7f\u7528\u7a7a\u6a21\u677f\u53c2\u6570\u5217\u8868<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/02\/image-1676643377398.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 143px; --smush-placeholder-aspect-ratio: 143\/60;\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%E7%B1%BB%E6%A8%A1%E6%9D%BF\"><\/span>\u7c7b\u6a21\u677f<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u4e0b\u9762\u7684\u4f8b\u5b50\u5b9a\u4e49\u4e86\u4e00\u4e2a Person \u7c7b\u578b\uff0c\u5c5e\u6027\u6709\u540d\u5b57\u548c\u5e74\u9f84\uff0c\u53d8\u91cf\u4e0d\u6307\u5b9a\u7c7b\u578b\uff0c\u7531\u6a21\u677f\u63a8\u5bfc<\/p>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n\n\/\/ template &lt;typename nameType, typename ageType&gt; \/\/ \u7528 typename \u6216 class \u90fd\u53ef\u4ee5\ntemplate&lt;class nameType, class ageType&gt;\nclass Person\n{\n    private:\n        nameType m_name;\n        ageType m_age;\n\n    public:\n        Person(nameType name, ageType age)\n        {\n            m_name = name;\n            m_age = age;\n        }\n\n        nameType getName()\n        {\n            return m_name;\n        }\n\n        ageType getAge()\n        {\n            return m_age;\n        }\n};\n\nint main()\n{\n    Person p1(&quot;\u5c0f\u660e&quot;, 20);\n    std::cout &lt;&lt; p1.getName() &lt;&lt; &quot; &quot; &lt;&lt; p1.getAge() &lt;&lt; std::endl;\n    std::cout &lt;&lt; typeid(p1.getName()).name() &lt;&lt; std::endl;\n    std::cout &lt;&lt; typeid(const char *).name() &lt;&lt; std::endl;\n    std::cout &lt;&lt; typeid(p1.getAge()).name() &lt;&lt; std::endl;\n    std::cout &lt;&lt; typeid(int).name() &lt;&lt; std::endl;\n}<\/code><\/pre>\n<p>PKc \u5c31\u662f \u201cconst char *\u201d<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/02\/image-1676646256049.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 153px; --smush-placeholder-aspect-ratio: 153\/119;\" \/><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%E7%B1%BB%E6%A8%A1%E6%9D%BF%E5%AF%B9%E8%B1%A1%E5%81%9A%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0\"><\/span>\u7c7b\u6a21\u677f\u5bf9\u8c61\u505a\u51fd\u6570\u53c2\u6570<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n\ntemplate&lt;typename nameType, typename ageType&gt;\nclass Person\n{\n    private:\n        nameType m_name;\n        ageType m_age;\n\n    public:\n        Person(nameType name, ageType age)\n        {\n            m_name = name;\n            m_age = age;\n        }\n\n        void setName(nameType name)\n        {\n            m_name = name;\n        }\n\n        void setAge(ageType age)\n        {\n            m_age = age;\n        }\n\n        nameType getName()\n        {\n            return m_name;\n        }\n\n        ageType getAge()\n        {\n            return m_age;\n        }\n};\n\ntemplate&lt;typename T1, typename T2&gt;\nvoid func(Person&lt;T1, T2&gt; &amp;p)\n{\n    p.setName(&quot;\u5c0f\u660e&quot;);\n    p.setAge(20);\n}\n\nint main()\n{\n    Person&lt;std::string, int&gt; p(&quot;&quot;, -1);\n    func(p);\n    std::cout &lt;&lt; p.getName() &lt;&lt; &quot; &quot; &lt;&lt; p.getAge() &lt;&lt; std::endl;\n    std::cout &lt;&lt; typeid(p.getName()).name() &lt;&lt; std::endl;\n    std::cout &lt;&lt; typeid(p.getAge()).name() &lt;&lt; std::endl;\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/02\/image-1676696468820.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 405px; --smush-placeholder-aspect-ratio: 405\/130;\" \/><\/p>\n<p>\u6216\u8005\u5c06\u4e0a\u9762\u7684 func \u51fd\u6570\u6539\u4e3a\u5982\u4e0b\u56fe,\u8ba9\u5b83\u81ea\u5df1\u63a8\u5bfc\u7c7b\u7c7b\u578b<br \/>\n<img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/02\/image-1676697338047.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 242px; --smush-placeholder-aspect-ratio: 242\/130;\" \/><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%E7%B1%BB%E6%A8%A1%E6%9D%BF%E7%BB%A7%E6%89%BF\"><\/span>\u7c7b\u6a21\u677f\u7ee7\u627f<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u8fd9\u91cc\u5199\u4e86\u4e00\u4e2a\u4f8b\u5b50\uff0cSon \u7c7b\u4ece Base \u7c7b\u7ee7\u627f\uff0c\u9700\u8981\u6307\u5b9a Base \u7c7b\u6a21\u677f\u7684 myType \u7c7b\u578b\uff0c\u5728\u6d3e\u751f\u7c7b Son \u4e2d\u4e5f\u53ef\u4ee5\u5199\u6210\u7c7b\u6a21\u677f\uff0c\u8ba9\u5b83\u81ea\u52a8\u63a8\u5bfc\u7c7b\u578b\u3002\u5728\u5b9e\u4f8b\u5316 Son \u7c7b\u65f6\uff0c\u63a8\u5bfc\u51fa Son \u4e2d myType1 \u7684\u7c7b\u578b\uff0c\u518d\u53ef\u4ee5\u63a8\u51fa\u57fa\u7c7b Base \u4e2d myType \u7684\u7c7b\u578b\u3002<\/p>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n\ntemplate&lt;typename myType&gt;\nclass Base\n{\n    public:\n        myType m_data;\n\n        ~Base()\n        {\n            std::cout &lt;&lt; typeid(m_data).name() &lt;&lt; std::endl;\n        }\n};\n\ntemplate&lt;typename myType1&gt;\nclass Son : public Base&lt;myType1&gt;\n{\n    public:\n        myType1 m_data1;\n        Son(myType1 data)\n        {\n            m_data1 = data;\n        }\n};\n\nint main()\n{\n    Son s(&quot;hello&quot;);\n    std::cout &lt;&lt; s.m_data1 &lt;&lt; &quot; &quot; &lt;&lt; typeid(s.m_data1).name() &lt;&lt; std::endl;\n}<\/code><\/pre>\n<h3><span class=\"ez-toc-section\" id=\"%E7%B1%BB%E6%A8%A1%E6%9D%BF%E6%88%90%E5%91%98%E5%87%BD%E6%95%B0%E7%B1%BB%E5%A4%96%E5%AE%9E%E7%8E%B0\"><\/span>\u7c7b\u6a21\u677f\u6210\u5458\u51fd\u6570\u7c7b\u5916\u5b9e\u73b0<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u5728\u4e00\u822c\u5f00\u53d1\u7684\u65f6\u5019\uff0c\u4f1a\u628a\u58f0\u660e\u653e\u5230\u5934\u6587\u4ef6\uff0c\u5b9a\u4e49\u5199\u5230\u6e90\u6587\u4ef6\uff0c\u5373\u58f0\u660e\u548c\u5b9a\u4e49\u5206\u79bb\u3002\u4e0d\u8fc7\u7c7b\u6a21\u677f\u6210\u5458\u51fd\u6570\u6bd4\u8f83\u7279\u6b8a\uff0c\u8fd9\u662f\u4e00\u4e2a\u8981\u6ce8\u610f\u7684\u70b9\uff0c\u4e0d\u80fd\u50cf\u5e73\u65f6\u90a3\u6837\uff0c\u58f0\u660e\u653e\u5728 .hpp\uff0c\u5b9a\u4e49\u653e\u5728 .cpp\uff0c\u5426\u5219\u7f16\u8bd1\u7684\u65f6\u5019\u4f1a\u62a5\u9519\u8bf4\u627e\u4e0d\u5230\u5b9a\u4e49\u3002\u56e0\u4e3a\u7c7b\u6a21\u677f\u5b9a\u4e49\u7684\u4e1c\u897f\u5728\u7f16\u8bd1\u65f6\u4e0d\u4f1a\u4e3a\u5b83\u5206\u914d\u5185\u5b58\uff0c\u53ea\u6709\u5b9e\u4f8b\u5316\u7684\u65f6\u5019\u624d\u4f1a\u5206\u914d\u3002<br \/>\n\u6240\u4ee5\u7c7b\u6a21\u677f\u7684\u58f0\u660e\u548c\u5b9a\u4e49\u5fc5\u987b\u5199\u5728\u540c\u4e00\u4e2a\u6587\u4ef6\u91cc\uff0c\u4f46\u662f\u53ef\u4ee5\u5c06\u58f0\u660e\u548c\u5b9a\u4e49\u5206\u79bb\uff0c\u8fd9\u91cc\u5c31\u5199\u4e86\u4e00\u4e2a\u4f8b\u5b50\uff0c\u5728\u7c7b\u5916\u5b9a\u4e49\u3002<\/p>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n\ntemplate&lt;typename T1, typename T2&gt;\nclass Person\n{\n    private:\n        T1 m_name;\n        T2 m_age;\n\n    public:\n        Person(T1 name, T2 age);\n\n        T1 getName();\n\n        T2 getAge();\n};\n\ntemplate&lt;typename T1, typename T2&gt;\nPerson&lt;T1, T2&gt;::Person(T1 name, T2 age)\n{\n    m_name = name;\n    m_age = age;\n}\n\ntemplate&lt;typename T1, typename T2&gt;\nT1 Person&lt;T1, T2&gt;::getName()\n{\n    return m_name;\n}\n\ntemplate&lt;typename T1, typename T2&gt;\nT2 Person&lt;T1, T2&gt;::getAge()\n{\n    return m_age;\n}\n\nint main()\n{\n    Person p(&quot;\u5c0f\u5f3a&quot;, 19);\n    std::cout &lt;&lt; p.getName() &lt;&lt; &quot; &quot; &lt;&lt; p.getAge() &lt;&lt; std::endl;\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/02\/image-1676704621665.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 172px; --smush-placeholder-aspect-ratio: 172\/90;\" \/><\/p>\n<h3><span class=\"ez-toc-section\" id=\"%E7%B1%BB%E6%A8%A1%E6%9D%BF%E5%8F%8B%E5%85%83\"><\/span>\u7c7b\u6a21\u677f\u53cb\u5143<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u7b2c\u4e00\u4e2a\u4f8b\u5b50\u53cb\u5143\u51fd\u6570\u7684\u5b9e\u73b0\u662f\u5728\u7c7b\u5185\u7684\uff0c\u53ea\u8981\u52a0\u4e0a\u4e86 friend\uff0c\u5c31\u4ee3\u8868\u5b83\u662f\u4e00\u4e2a\u5168\u5c40\u51fd\u6570\uff0c\u4f46\u662f\u4f5c\u4e3a\u53cb\u5143\u53ef\u4ee5\u8bbf\u95ee\u79c1\u6709\u6210\u5458<\/p>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n\ntemplate&lt;typename T&gt;\nclass Person\n{\n    private:\n        T m_name;\n        friend T get(Person &amp;p)\n        {\n            return p.m_name;\n        }\n\n    public:\n        Person(T name)\n        {\n            m_name = name;\n        }\n};\n\nint main()\n{\n    Person p(&quot;\u5c0f\u5f3a&quot;);\n    std::cout &lt;&lt; get(p) &lt;&lt; std::endl;\n}<\/code><\/pre>\n<p>\u800c\u53cb\u5143\u51fd\u6570\u7684\u5b9e\u73b0\u5199\u5728\u7c7b\u5916\u7684\u5c31\u8981\u9ebb\u70e6\u4e00\u70b9\u4e86<br \/>\n\u5728\u7c7b\u4e2d\u58f0\u660e\u53cb\u5143\u51fd\u6570\u7684\u5730\u65b9\uff0c\u51fd\u6570\u540d\u540e\u8981\u52a0\u4e0a\u5c16\u62ec\u53f7<br \/>\n\u5728\u53cb\u5143\u51fd\u6570\u5b9e\u73b0\u5904\uff0c\u51fd\u6570\u53c2\u6570\u4e2d\u7684\u7c7b\u6a21\u677f\u8981\u5199\u4e0a\u53c2\u6570\u5217\u8868<\/p>\n<pre><code class=\"language-cpp\">#include &lt;iostream&gt;\n\ntemplate&lt;typename T&gt;\nclass Person\n{\n    private:\n        T m_name;\n        friend T get&lt;&gt;(Person &amp;p);\n\n    public:\n        Person(T name)\n        {\n            m_name = name;\n        }\n};\n\ntemplate&lt;typename T&gt;\nT get(Person&lt;T&gt; &amp;p)\n{\n    return p.m_name;\n}\n\nint main()\n{\n    Person p(&quot;\u5c0f\u5f3a&quot;);\n    std::cout &lt;&lt; get(p) &lt;&lt; std::endl;\n}<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"%E4%BB%BF_vector\"><\/span>\u4eff vector<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>vector \u662f C++ \u4e2d\u7684\u4e00\u79cd\u5bb9\u5668\uff0c\u7b80\u5355\u70b9\u8bf4\u5c31\u662f\u4e00\u4e2a\u52a8\u6001\u6570\u7ec4\u3002\u8fd9\u91cc\u5c31\u5e94\u7528\u6a21\u677f\u6280\u672f\u6a21\u62df\u51e0\u4e2a vector \u7684\u57fa\u7840\u63a5\u53e3\uff0c\u4ee5\u719f\u6089\u6a21\u677f\u7684\u4f7f\u7528\u3002<\/p>\n<p>MyVector.hpp<\/p>\n<pre><code class=\"language-cpp\">#ifndef MYVECTOR_HPP\n#define MYVECTOR_HPP\n\n#define INIT_SIZE 16 \/\/ \u521d\u59cb\u6570\u7ec4\u5927\u5c0f\n#define EXTEND_SIZE 16 \/\/ \u6bcf\u6b21\u6269\u5bb9\u5927\u5c0f\n\ntemplate&lt;typename T&gt;\nclass MyVector\n{\n    private:\n        T *m_pData = nullptr; \/\/ \u6307\u5411\u5b58\u50a8\u6570\u636e\u7684\u6307\u9488\n        int m_capacity; \/\/ \u6570\u7ec4\u5bb9\u91cf\n        int m_size; \/\/ \u6570\u7ec4\u5b9e\u9645\u5927\u5c0f\n\n    public:\n        \/**\n         * @brief \u9ed8\u8ba4\u6784\u9020\u51fd\u6570\n         *\/\n        MyVector();\n\n        \/**\n         * @brief \u62f7\u8d1d\u6784\u9020\u51fd\u6570 - \u6df1\u62f7\u8d1d\u5b9e\u73b0\n         * @param mv \u62f7\u8d1d\u5bf9\u8c61\n         *\/\n        MyVector(const MyVector &amp;mv);\n\n        \/**\n         * @brief \u8d4b\u503c\u91cd\u8f7d - \u6df1\u62f7\u8d1d\u5b9e\u73b0\n         * @param mv \u62f7\u8d1d\u5bf9\u8c61\n         *\/\n        MyVector &amp;operator=(const MyVector &amp;mv);\n\n        \/**\n         * @brief \u6790\u6784\u51fd\u6570 - \u91ca\u653e\u8d44\u6e90\n         *\/\n        ~MyVector();\n\n        \/**\n         * @brief \u5c3e\u63d2\u5b9e\u73b0\n         * @param data \u8981\u63d2\u5165\u7684\u6570\u636e\n         *\/\n        void push_back(const T &amp;data);\n\n        \/**\n         * @brief \u5c3e\u5220\u5b9e\u73b0\n        *\/\n        void pop_back();\n\n        \/**\n         * @brief \u91cd\u8f7d [] \u5b9e\u73b0\u4e0b\u6807\u7d22\u5f15\n         * @param idx \u4e0b\u6807\n         * @return \u8fd4\u56de\u6570\u636e\n        *\/\n        T &amp;operator[](int idx);\n\n        \/**\n         * @brief \u83b7\u53d6\u6570\u7ec4\u7684\u5927\u5c0f\n         * @return \u6570\u7ec4\u7684\u5927\u5c0f\n        *\/\n        int size();\n};\n\ntemplate&lt;typename T&gt;\nMyVector&lt;T&gt;::MyVector()\n{\n    m_pData = new T[INIT_SIZE];\n    m_capacity = INIT_SIZE;\n    m_size = 0;\n}\n\ntemplate&lt;typename T&gt;\nMyVector&lt;T&gt;::MyVector(const MyVector &amp;mv)\n{\n    if (m_pData != nullptr)\n    {\n        delete[] m_pData;\n    }\n\n    m_capacity = mv.m_capacity;\n    m_size = mv.m_size;\n\n    m_pData = new T[m_capacity];\n    for (int i = 0; i &lt; m_size; ++i)\n    {\n        m_pData[i] = mv.m_pData[i];\n    }\n}\n\ntemplate&lt;typename T&gt;\nMyVector&lt;T&gt; &amp;MyVector&lt;T&gt;::operator=(const MyVector &amp;mv)\n{\n    if (m_pData != nullptr)\n    {\n        delete[] m_pData;\n    }\n\n    m_capacity = mv.m_capacity;\n    m_size = mv.m_size;\n\n    m_pData = new T[m_capacity];\n    for (int i = 0; i &lt; m_size; ++i)\n    {\n        m_pData[i] = mv.m_pData[i];\n    }\n\n    return *this;\n}\n\ntemplate&lt;typename T&gt;\nMyVector&lt;T&gt;::~MyVector()\n{\n    if (m_pData != nullptr)\n    {\n        delete[] m_pData;\n        m_pData = nullptr;\n        m_capacity = 0;\n        m_size = 0;\n    }\n}\n\ntemplate&lt;typename T&gt;\nvoid MyVector&lt;T&gt;::push_back(const T &amp;data)\n{\n    if (m_size + 1 &gt; m_capacity) \/\/ \u6269\u5bb9\n    {\n        T *tmp = new T[m_capacity + EXTEND_SIZE];\n        for (int i = 0; i &lt; m_size; ++i)\n        {\n            tmp[i] = m_pData[i];\n        }\n        delete[] m_pData;\n        m_pData = tmp;\n        m_capacity += EXTEND_SIZE;\n    }\n    m_pData[m_size] = data;\n    ++m_size;\n}\n\ntemplate&lt;typename T&gt;\nvoid MyVector&lt;T&gt;::pop_back()\n{\n    if (m_size == 0)\n    {\n        return;\n    }\n    --m_size;\n}\n\ntemplate&lt;typename T&gt;\nT &amp;MyVector&lt;T&gt;::operator[](int idx)\n{\n    return m_pData[idx];\n}\n\ntemplate&lt;typename T&gt;\nint MyVector&lt;T&gt;::size()\n{\n    return m_size;\n}\n\n#endif<\/code><\/pre>\n<p>testMain.cpp<\/p>\n<pre><code class=\"language-cpp\">#include &quot;MyVector.hpp&quot;\n#include &lt;iostream&gt;\n\ntemplate&lt;typename T&gt;\nvoid print(MyVector&lt;T&gt; &amp;mv)\n{\n    for (int i = 0; i &lt; mv.size(); ++i)\n    {\n        std::cout &lt;&lt; mv[i] &lt;&lt; &quot; &quot;;\n    }\n    std::cout &lt;&lt; std::endl;\n}\n\nint main()\n{\n    MyVector&lt;int&gt; mv1; \/\/ \u9ed8\u8ba4\u6784\u9020\n    for (int i = 0; i &lt; 100; ++i)\n    {\n        mv1.push_back(i * 3); \/\/ \u5c3e\u63d2\n    }\n    print(mv1);\n\n    int mv1Size = mv1.size();\n    for (int i = 0; i &lt; mv1Size \/ 2; ++i)\n    {\n        mv1.pop_back(); \/\/ \u5c3e\u5220\n    }\n    print(mv1);\n\n    std::string s1 = &quot;hello&quot;;\n    std::string s2 = &quot;12345&quot;;\n    std::string s3 = &quot;abcdef&quot;;\n    MyVector&lt;std::string&gt; mv2;\n    mv2.push_back(s1);\n    mv2.push_back(s2);\n    mv2.push_back(s3);\n    print(mv2);\n\n    MyVector mv3(mv2); \/\/ \u62f7\u8d1d\u6784\u9020\n    print(mv3);\n\n    MyVector mv4 = mv3; \/\/ \u8d4b\u503c\u91cd\u8f7d\n    print(mv4);\n}<\/code><\/pre>\n<p><img decoding=\"async\" data-src=\"https:\/\/blog.iyatt.com\/wp-content\/uploads\/2023\/02\/image-1676736865048-e1676737939495.png\" alt=\"file\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" \/><br \/>\n\u53f3\u952e\u5728\u65b0\u6807\u7b7e\u9875\u4e2d\u6253\u5f00\u56fe\u50cf\u5373\u4e3a\u539f\u56fe<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u73af\u5883 Debian 11 \uff08arm64) \u7f16\u8bd1\u5668 g++ 10.2.1\uff1b\u7f16\u8bd1\u6807\u51c6 C++20\uff1b\u53c2\u6570\uff1a-std= [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"zakra_page_container_layout":"customizer","zakra_page_sidebar_layout":"customizer","zakra_remove_content_margin":false,"zakra_sidebar":"customizer","zakra_transparent_header":"customizer","zakra_logo":0,"zakra_main_header_style":"default","zakra_menu_item_color":"","zakra_menu_item_hover_color":"","zakra_menu_item_active_color":"","zakra_menu_active_style":"","zakra_page_header":true,"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-9115","post","type-post","status-publish","format-standard","hentry","category-all"],"modified_by":"IYATT-yx","_links":{"self":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts\/9115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9115"}],"version-history":[{"count":0,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=\/wp\/v2\/posts\/9115\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.iyatt.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}