{"id":1014,"date":"2020-05-08T17:00:07","date_gmt":"2020-05-08T09:00:07","guid":{"rendered":"https:\/\/beijian99.top\/?p=1014"},"modified":"2025-05-10T09:06:28","modified_gmt":"2025-05-10T01:06:28","slug":"c-11-%e6%96%b0%e7%89%b9%e6%80%a7","status":"publish","type":"post","link":"https:\/\/beijian99.top\/?p=1014","title":{"rendered":"C++ 11 \u65b0\u7279\u6027"},"content":{"rendered":"\n<p>\u4e00\u3001\u81ea\u52a8\u7c7b\u578b\u63a8\u5bfc<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>auto<\/code> \u5173\u952e\u5b57<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>auto i = 42;          \/\/ i \u662f int \u7c7b\u578b<br>auto d = 3.14;        \/\/ d \u662f double \u7c7b\u578b<br>auto s = \"hello\";     \/\/ s \u662f const char* \u7c7b\u578b<br><br>std::vector&lt;int&gt; vec;<br>auto it = vec.begin(); \/\/ it \u662f std::vector&lt;int&gt;::iterator \u7c7b\u578b<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><code>decltype<\/code> \u5173\u952e\u5b57<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>int x = 10;<br>decltype(x) y = 20;   \/\/ y \u7684\u7c7b\u578b\u4e0e x \u76f8\u540c (int)<br><br>const std::vector&lt;int&gt; vec;<br>decltype(vec.size()) size = vec.size(); \/\/ size_t \u7c7b\u578b<\/code><\/pre>\n\n\n\n<p>\u4e8c\u3001\u667a\u80fd\u6307\u9488<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>unique_ptr<\/code> (\u72ec\u5360\u6240\u6709\u6743)<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>#include &lt;memory&gt;<br>std::unique_ptr&lt;int&gt; p1(new int(10));<br>\/\/ std::unique_ptr&lt;int&gt; p2 = p1; \/\/ \u9519\u8bef\uff0c\u4e0d\u80fd\u590d\u5236<br>std::unique_ptr&lt;int&gt; p2 = std::move(p1); \/\/ \u53ef\u4ee5\u79fb\u52a8<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><code>shared_ptr<\/code> (\u5171\u4eab\u6240\u6709\u6743)<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>std::shared_ptr&lt;int&gt; p1(new int(20));<br>std::shared_ptr&lt;int&gt; p2 = p1; \/\/ \u5f15\u7528\u8ba1\u6570\u589e\u52a0<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><code>weak_ptr<\/code> (\u5f31\u5f15\u7528)<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>std::shared_ptr&lt;int&gt; sp(new int(30));<br>std::weak_ptr&lt;int&gt; wp = sp;<br><br>if (auto locked = wp.lock()) { \/\/ \u5c1d\u8bd5\u83b7\u53d6 shared_ptr<br>    \/\/ \u4f7f\u7528 locked<br>}<\/code><\/pre>\n\n\n\n<p>\u4e09\u3001\u53f3\u503c\u5f15\u7528\u548c\u79fb\u52a8\u8bed\u4e49<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u53f3\u503c\u5f15\u7528 (<code>&amp;&amp;<\/code>)<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>void process(int&amp; x) { \/* \u5904\u7406\u5de6\u503c *\/ }<br>void process(int&amp;&amp; x) { \/* \u5904\u7406\u53f3\u503c *\/ }<br><br>int a = 10;<br>process(a);   \/\/ \u8c03\u7528\u5de6\u503c\u7248\u672c<br>process(20);  \/\/ \u8c03\u7528\u53f3\u503c\u7248\u672c<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u79fb\u52a8\u6784\u9020\u51fd\u6570\u548c\u79fb\u52a8\u8d4b\u503c\u8fd0\u7b97\u7b26<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>class MyString {<br>    char* data;<br>public:<br>    \/\/ \u79fb\u52a8\u6784\u9020\u51fd\u6570<br>    MyString(MyString&amp;&amp; other) noexcept <br>        : data(other.data) {<br>        other.data = nullptr;<br>    }<br>    <br>    \/\/ \u79fb\u52a8\u8d4b\u503c\u8fd0\u7b97\u7b26<br>    MyString&amp; operator=(MyString&amp;&amp; other) noexcept {<br>        if (this != &amp;other) {<br>            delete[] data;<br>            data = other.data;<br>            other.data = nullptr;<br>        }<br>        return *this;<br>    }<br>};<\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><code>std::move<\/code><\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>std::vector&lt;std::string&gt; v1, v2;<br>v1.push_back(\"hello\");<br>v2.push_back(std::move(v1[0])); \/\/ \u79fb\u52a8\u800c\u975e\u590d\u5236<\/code><\/pre>\n\n\n\n<p>\u56db\u3001Lambda \u8868\u8fbe\u5f0f<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>auto add = [](int a, int b) { return a + b; };<br>int sum = add(3, 4);<br><br>\/\/ \u6355\u83b7\u5217\u8868<br>int x = 10;<br>auto print_x = [x]() { std::cout &lt;&lt; x; };<br>print_x();<br><br>\/\/ mutable Lambda<br>auto counter = [count = 0]() mutable { return ++count; };<\/code><\/pre>\n\n\n\n<p>\u4e94\u3001\u57fa\u4e8e\u8303\u56f4\u7684 for \u5faa\u73af<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>std::vector&lt;int&gt; vec = {1, 2, 3, 4};<br><br>\/\/ \u503c\u62f7\u8d1d\u65b9\u5f0f<br>for (int x : vec) {<br>    std::cout &lt;&lt; x &lt;&lt; \" \";<br>}<br><br>\/\/ \u5f15\u7528\u65b9\u5f0f\u4fee\u6539<br>for (int&amp; x : vec) {<br>    x *= 2;<br>}<br><br>\/\/ const \u5f15\u7528<br>for (const int&amp; x : vec) {<br>    std::cout &lt;&lt; x &lt;&lt; \" \";<br>}<\/code><\/pre>\n\n\n\n<p>\u516d\u3001\u521d\u59cb\u5316\u5217\u8868<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u7edf\u4e00\u521d\u59cb\u5316\u8bed\u6cd5<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>int x{10};              \/\/ \u66ff\u4ee3 int x = 10;<br>std::vector&lt;int&gt; v{1, 2, 3}; \/\/ \u521d\u59cb\u5316\u5217\u8868<\/code><\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u7c7b\u6210\u5458\u521d\u59cb\u5316<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>class MyClass {<br>    int x = 10; \/\/ C++11 \u7c7b\u6210\u5458\u521d\u59cb\u5316<br>    std::string s{\"hello\"};<br>};<\/code><\/pre>\n\n\n\n<p>\u4e03\u3001<code>nullptr<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>void foo(int* p) {}<br><br>foo(NULL);    \/\/ \u53ef\u80fd\u6709\u95ee\u9898\uff0cNULL \u53ef\u80fd\u662f 0<br>foo(nullptr); \/\/ \u660e\u786e\u8868\u793a\u7a7a\u6307\u9488<\/code><\/pre>\n\n\n\n<p>\u516b\u3001\u5f3a\u7c7b\u578b\u679a\u4e3e<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>enum class Color { Red, Green, Blue }; \/\/ \u4f5c\u7528\u57df\u679a\u4e3e<br><br>Color c = Color::Red;<br>\/\/ int i = Color::Red; \/\/ \u9519\u8bef\uff0c\u4e0d\u80fd\u9690\u5f0f\u8f6c\u6362<\/code><\/pre>\n\n\n\n<p>\u4e5d\u3001<code>constexpr<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>constexpr int square(int x) {<br>    return x * x;<br>}<br><br>int array[square(5)]; \/\/ \u7f16\u8bd1\u65f6\u8ba1\u7b97<\/code><\/pre>\n\n\n\n<p>\u5341\u3001\u59d4\u6258\u6784\u9020\u51fd\u6570<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cpp\u590d\u5236<code>class MyClass {\n    int x, y;\npublic:\n    MyClass(int a) : x(a), y(0) {}\n    MyClass() : MyClass(0) {} \/\/ \u59d4\u6258\u7ed9\u53e6\u4e00\u4e2a\u6784\u9020\u51fd\u6570\n};<\/code><\/pre>\n\n\n\n<p>\u5341\u4e00\u3001<code>override<\/code> \u548c <code>final<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>class Base {<br>public:<br>    virtual void foo() const;<br>    virtual void bar() final; \/\/ \u7981\u6b62\u6d3e\u751f\u7c7b\u91cd\u5199<br>};<br><br>class Derived : public Base {<br>public:<br>    void foo() const override; \/\/ \u660e\u786e\u8868\u793a\u91cd\u5199<br>    \/\/ void bar() override; \/\/ \u9519\u8bef\uff0c\u57fa\u7c7b\u5df2\u58f0\u660e final<br>};<\/code><\/pre>\n\n\n\n<p>\u5341\u4e8c\u3001\u53d8\u957f\u6a21\u677f<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>template&lt;typename... Args&gt;<br>void print(Args... args) {<br>    (std::cout &lt;&lt; ... &lt;&lt; args) &lt;&lt; '\\n'; \/\/ C++17 \u6298\u53e0\u8868\u8fbe\u5f0f<br>}<br><br>print(1, 2.5, \"hello\"); \/\/ \u63a5\u53d7\u4efb\u610f\u6570\u91cf\u53c2\u6570<\/code><\/pre>\n\n\n\n<p>\u5341\u4e09\u3001\u7ebf\u7a0b\u652f\u6301<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>#include &lt;thread&gt;<br>#include &lt;mutex&gt;<br><br>std::mutex mtx;<br><br>void task() {<br>    std::lock_guard&lt;std::mutex&gt; lock(mtx);<br>    \/\/ \u4e34\u754c\u533a\u4ee3\u7801<br>}<br><br>int main() {<br>    std::thread t1(task);<br>    std::thread t2(task);<br>    t1.join();<br>    t2.join();<br>}<\/code><\/pre>\n\n\n\n<p>\u5341\u56db\u3001<code>std::function<\/code> \u548c <code>std::bind<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>#include &lt;functional&gt;<br><br>int add(int a, int b) { return a + b; }<br><br>int main() {<br>    std::function&lt;int(int, int)&gt; func = add;<br>    auto bound = std::bind(func, 10, std::placeholders::_1);<br>    int result = bound(20); \/\/ \u76f8\u5f53\u4e8e add(10, 20)<br>}<\/code><\/pre>\n\n\n\n<p>\u5341\u4e94\u3001<code>std::array<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>#include &lt;array&gt;<br><br>std::array&lt;int, 5&gt; arr = {1, 2, 3, 4, 5};<br>for (auto x : arr) {<br>    std::cout &lt;&lt; x &lt;&lt; \" \";<br>}<\/code><\/pre>\n\n\n\n<p>\u5341\u516d\u3001<code>std::tuple<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>#include &lt;tuple&gt;<br><br>auto t = std::make_tuple(1, 2.5, \"hello\");<br>int x = std::get&lt;0&gt;(t); \/\/ \u83b7\u53d6\u7b2c\u4e00\u4e2a\u5143\u7d20<\/code><\/pre>\n\n\n\n<p>\u5341\u4e03\u3001\u7c7b\u578b\u522b\u540d (<code>using<\/code>)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>using IntVector = std::vector&lt;int&gt;; \/\/ \u66ff\u4ee3 typedef<br><br>template&lt;typename T&gt;<br>using MyMap = std::map&lt;int, T&gt;;<\/code><\/pre>\n\n\n\n<p>\u5341\u516b\u3001\u9759\u6001\u65ad\u8a00 (<code>static_assert<\/code>)<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>static_assert(sizeof(int) == 4, \"int must be 4 bytes\");<\/code><\/pre>\n\n\n\n<p>\u5341\u4e5d\u3001<code>noexcept<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>void foo() noexcept { \/\/ \u4fdd\u8bc1\u4e0d\u629b\u51fa\u5f02\u5e38<br>    \/\/ ...<br>}<\/code><\/pre>\n\n\n\n<p>\u4e8c\u5341\u3001\u539f\u59cb\u5b57\u7b26\u4e32\u5b57\u9762\u91cf<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>const char* path = R\"(C:\\Program Files\\MyApp)\";<br>const char* html = R\"(<br>&lt;html&gt;<br>    &lt;body&gt;Hello&lt;\/body&gt;<br>&lt;\/html&gt;<br>)\";<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u81ea\u52a8\u7c7b\u578b\u63a8\u5bfc auto i = 42; \/\/ i \u662f int \u7c7b\u578bauto d = 3.14; \/\/ d  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1021,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[153],"tags":[154],"class_list":["post-1014","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cpp","tag-cpp"],"_links":{"self":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/1014","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1014"}],"version-history":[{"count":2,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/1014\/revisions"}],"predecessor-version":[{"id":1052,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/1014\/revisions\/1052"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/media\/1021"}],"wp:attachment":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1014"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1014"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1014"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}