<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cpp on 111qqz's blog</title><link>https://111qqz.com/en/tags/cpp/</link><description>Recent content in Cpp on 111qqz's blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2015-2026 111qqz</copyright><lastBuildDate>Tue, 12 Apr 2022 21:39:31 +0800</lastBuildDate><atom:link href="https://111qqz.com/en/tags/cpp/index.xml" rel="self" type="application/rss+xml"/><item><title>浅谈 Cpp Value Categories</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-04-12-cpp-value-caregories/</link><pubDate>Tue, 12 Apr 2022 21:39:31 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-04-12-cpp-value-caregories/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;每一个cpp expression都有一个type 和 value category 属性
前者大家都比较了解，但是后者却常常被忽视&lt;/p&gt;</description></item><item><title>深入理解 std::shared_ptr</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-shared-ptr-notes/</link><pubDate>Sat, 05 Mar 2022 16:33:25 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-shared-ptr-notes/</guid><description>梳理 shared_ptr 的控制块、引用计数、线程安全边界和常见使用陷阱。</description></item><item><title>[c++17] std::any 笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-any-notes/</link><pubDate>Sat, 05 Mar 2022 16:02:36 +0800</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2022-03-05-std-any-notes/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;一种很常见的背景是，需要表示未知类型的数据。 比如可能是用户提供的数据，比如是一个Cache的实现， value想支持任意类型的数据&lt;/p&gt;</description></item><item><title>[c++11] std::async std::packaged_task std::promise and std::future notes</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-30-async-packaged-ask-promise-future-notes/</link><pubDate>Sun, 30 Sep 2018 06:49:27 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-30-async-packaged-ask-promise-future-notes/</guid><description>&lt;p&gt;把std::async,std::packaged_task,std::promise三个放在一起来说,是因为他们都可以返回一个std::future对象.简单来说,当某个线程需要等待一个特定的一次性事件(one-off event),它可以用一个&amp;quot;future&amp;quot;来表示这个事件.&lt;/p&gt;</description></item><item><title>[C++11]std::condition_variable notes</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-23-condition_variable-notes/</link><pubDate>Sun, 23 Sep 2018 08:42:33 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-23-condition_variable-notes/</guid><description>&lt;blockquote&gt;&lt;p&gt;condition_variable 类是同步原语，能用于阻塞一个线程，或同时阻塞多个线程，直至另一线程修改共享变量（条件）并通知 condition_variable 。&lt;/p&gt;</description></item><item><title>std::call_once &amp;&amp; std::once_flag notes</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-20-call_once-once_flag-notes/</link><pubDate>Thu, 20 Sep 2018 12:47:46 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-20-call_once-once_flag-notes/</guid><description>&lt;p&gt;多线程保护数据时，一种较为特殊的情况是只需要保护资源的初始化。&lt;/p&gt;</description></item><item><title>[施工中][c++11] move semantics &amp;&amp; perfect forwarding 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-09-move-semantic-perfect-forward-notes/</link><pubDate>Sun, 09 Sep 2018 13:01:45 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-09-move-semantic-perfect-forward-notes/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;move semantics是modern cpp中非常重要的特性，有必要详细了解一下。&lt;/p&gt;</description></item><item><title>[C++11 ] std::ref&amp;&amp;std::reference_wrapper notes</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-09-reference_wrapper-notes/</link><pubDate>Sun, 09 Sep 2018 11:28:53 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-09-reference_wrapper-notes/</guid><description>&lt;p&gt;起因是在看《CplusplusConcurrencyInAction_PracticalMultithreading》的时候，里面讲到初始化std::thread的时候，如果thread funtion的参数列表中有引用，需要传入std::ref才可以得到符合预期的结果。&lt;/p&gt;</description></item><item><title>[设计模式] 观察者( Observer )模式学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-01-observer-pattern-notes/</link><pubDate>Sat, 01 Sep 2018 09:27:40 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-09-01-observer-pattern-notes/</guid><description>&lt;p&gt;最近在学习node.js，里面讲到node.js的事件机制使用了观察者模式，因此来学习一下。&lt;/p&gt;</description></item><item><title>[设计模式] 组合模式（composite） 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%85%B6%E4%BB%96/2018-08-28-composite-pattern-notes/</link><pubDate>Tue, 28 Aug 2018 06:30:59 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%85%B6%E4%BB%96/2018-08-28-composite-pattern-notes/</guid><description>&lt;p&gt;目的是忽略单一对象和组合对象的不同。 有点像以前写过的用链表定义一个树结构，每个节点是一个val + 多个&lt;em&gt;tree 。如果某个节点是叶子节点了，那么对应的&lt;/em&gt;tree都为NULL. 只不过这里用了更加面向对象的实现。&lt;/p&gt;</description></item><item><title>[C++11] promise &amp;&amp; future leanrning notes</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-23-c11-promise-future-notes/</link><pubDate>Thu, 23 Aug 2018 02:45:53 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-23-c11-promise-future-notes/</guid><description>&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="std::promise / std::future（根据正文上下文重绘的示例图，并非遗失原图）"
 src="https://111qqz.com/images/generated/missing/026-promise-future.svg"
 &gt;&lt;/figure&gt;
&lt;p&gt;用人话就是，主线程传给附属线程一个promise Object,然后主线程想要获取附属线程set给promise Object的值（也就是该线程返回的某个结果），需要通过主线程中的promise object 得到对应的future object(每个promise 对应一个 future),然后调用future 的get方法。如果附属线程没有执行作为参数传入的promise的set方法去返回结果，那么程序就会block住。&lt;/p&gt;</description></item><item><title>把二进制文件按字节读到vector中</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-21-how-to-read-binary-data-into-cpp-vector/</link><pubDate>Tue, 21 Aug 2018 06:08:56 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-21-how-to-read-binary-data-into-cpp-vector/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;readFromFile1&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;filePath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;FILE&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filePath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;rb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;unsigned&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="k"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 获取文件大小，尽量一次读完
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;fileSize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;getFileSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileSize&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileSize&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fileSize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;fileSize&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;fileSize&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;15&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;16&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;17&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;18&lt;/span&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;19&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 在读取过程当中，有可能文件大小有变化，再尝试读取
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;20&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;read_len&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;21&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;read_len&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;22&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(;;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;23&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;read_len&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;24&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;buf&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;25&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;read_len&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;26&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;27&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;28&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;29&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;30&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;31&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;另外一种C++风格，但是性能较差的方法：&lt;/p&gt;</description></item><item><title>boost:property_tree 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-20-boost_property_tree-notes/</link><pubDate>Mon, 20 Aug 2018 08:10:16 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-20-boost_property_tree-notes/</guid><description>&lt;p&gt;先放资料:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://zenol.fr/blog/boost-property-tree/en.html" target="_blank" rel="noreferrer"&gt;How to use boost::property_tree to load and write JSON&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/4586768/how-to-iterate-a-boost-property-tree" target="_blank" rel="noreferrer"&gt;How to iterate a boost property tree?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;不出现key的方法遍历一个json文件:&lt;/p&gt;</description></item><item><title>记录一次因动态库符号表可见性导致的未定义的引用(undefined reference)</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-15-undefined-references-caused-by-dynamic-library-symbol-table-visibility/</link><pubDate>Wed, 15 Aug 2018 13:12:17 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-08-15-undefined-references-caused-by-dynamic-library-symbol-table-visibility/</guid><description>&lt;p&gt;编译某代码，发现报错某函数未定义的引用。该函数的是先前编译得到的动态库中。&lt;/p&gt;</description></item><item><title>c++11 function 与bind 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-07-19-cpp11-function-bind-notes/</link><pubDate>Thu, 19 Jul 2018 10:46:26 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-07-19-cpp11-function-bind-notes/</guid><description>&lt;p&gt;C++11 std::function 是一种通用、多态的函数封装,它的实例可以对任何可
以调用的目标实体进行存储、复制和调用操作&lt;/p&gt;</description></item><item><title>C++ 记录代码运行时间</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-07-10-record-code-run-time-with-cpp/</link><pubDate>Tue, 10 Jul 2018 02:26:50 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-07-10-record-code-run-time-with-cpp/</guid><description>&lt;p&gt;以前用的办法太老土啦&lt;/p&gt;
&lt;p&gt;看到一个since C++11的方法，我觉得比较优雅&lt;/p&gt;</description></item><item><title>gdb学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-07-06-gdb-notes/</link><pubDate>Fri, 06 Jul 2018 07:44:38 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-07-06-gdb-notes/</guid><description>&lt;p&gt;用gdb调试c++的时候，需要添加-g编译选项add_compile_options(-g)，并且关掉各种编译优化&lt;/p&gt;</description></item><item><title>linux 下C++ 连接mysql 数据库</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%85%B6%E4%BB%96/2018-07-02-connect-mysql-with-cpp-under-linux/</link><pubDate>Mon, 02 Jul 2018 07:02:28 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%85%B6%E4%BB%96/2018-07-02-connect-mysql-with-cpp-under-linux/</guid><description>&lt;p&gt;资料推荐这个:&lt;a href="http://zetcode.com/db/mysqlc/" target="_blank" rel="noreferrer"&gt;MySQL C API programming tutorial&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;环境为ubuntu 14.04 lts&lt;/p&gt;
&lt;p&gt;需要安装mysql 和mysql 开发包&lt;/p&gt;</description></item><item><title>C++ STL Algotithms 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-05-06-cpp-stl-algotithms-notes/</link><pubDate>Sun, 06 May 2018 09:45:50 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-05-06-cpp-stl-algotithms-notes/</guid><description>&lt;p&gt;迫于拙劣的cpp水平，这次来记录一些关于STL算法部分的内容。&lt;/p&gt;</description></item><item><title>C++ IO Streams 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-05-04-cpp-io-streams-notes/</link><pubDate>Fri, 04 May 2018 03:48:37 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-05-04-cpp-io-streams-notes/</guid><description>&lt;p&gt;迫于拙劣的cpp水平，来补补以前忽略掉的cpp细节。&lt;/p&gt;
&lt;p&gt;老规矩，先放资料。&lt;/p&gt;</description></item><item><title>Eigen: C++开源矩阵学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%85%B6%E4%BB%96/2018-04-05-eigen-notes/</link><pubDate>Thu, 05 Apr 2018 07:14:54 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/%E5%85%B6%E4%BB%96/2018-04-05-eigen-notes/</guid><description>&lt;p&gt;接触Eigen的原因是最近在看caffe/caffe2源码,caffe2中使用了Eigen库. &lt;a href="http://eigen.tuxfamily.org/index.php?title=Main_Page" target="_blank" rel="noreferrer"&gt;Eigen&lt;/a&gt; 是一个基于C++模板的线性代数库，直接将库下载后放在项目目录下，然后包含头文件就能使用，非常方便。对于Linux用户,只需要把头文件放到/usr/include 下即可此外，Eigen的接口清晰，稳定高效。&lt;/p&gt;</description></item><item><title>cmake 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-03-18-cmake-notes/</link><pubDate>Sun, 18 Mar 2018 10:27:26 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2018-03-18-cmake-notes/</guid><description>&lt;p&gt;前置技能点：&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.gnu.org/software/make/" target="_blank" rel="noreferrer"&gt;gnu make&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/linux/2018-03-17-linux-static-and-shared-libraries/" &gt;linux下.so,.a,.o文件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;cmake是一个工具，也可以看成一门语言。&lt;/p&gt;</description></item><item><title>CUDA C Best Practices Guide 阅读笔记（二） Heterogeneous Computing</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-13-cuda-c-best-practices-guide-heterogeneous-computing/</link><pubDate>Tue, 13 Feb 2018 06:38:38 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-13-cuda-c-best-practices-guide-heterogeneous-computing/</guid><description>&lt;p&gt;CUDA 编程涉及到在不同的平台上同时运行代码:包含CPU的host 和包含GPU的device.&lt;/p&gt;</description></item><item><title>cuda c++ 基础算法库 thrust 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-10-cuda-thrust-notes/</link><pubDate>Sat, 10 Feb 2018 08:43:54 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-10-cuda-thrust-notes/</guid><description>&lt;p&gt;可以了解成并行版的STL(?&lt;/p&gt;
&lt;p&gt;过了一遍&lt;a href="http://docs.nvidia.com/cuda/thrust/index.html" target="_blank" rel="noreferrer"&gt;nvidia的官方网文档&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;发现如果熟悉STL的话,thrust没什么太多好说的,看起来很简单&amp;hellip;&lt;/p&gt;</description></item><item><title>cuda error checking 学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-09-cuda-error-checking-notes/</link><pubDate>Fri, 09 Feb 2018 06:55:00 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cuda/2018-02-09-cuda-error-checking-notes/</guid><description>&lt;p&gt;由于发现cuda c++ 的 debug方式和c++ 差别很大,因此打算再开一篇,专门记录一些和error checking 以及debug有关的内容.&lt;/p&gt;</description></item><item><title>qt 5.x　初探　(5)　</title><link>https://111qqz.com/en/post/acm-icpc/2017/2017-06-04-qt-5-notes-5/</link><pubDate>Sun, 04 Jun 2017 17:14:39 +0000</pubDate><guid>https://111qqz.com/en/post/acm-icpc/2017/2017-06-04-qt-5-notes-5/</guid><description>&lt;p&gt;&lt;a href="http://doc.qt.io/qt-5/topics-ui.html" target="_blank" rel="noreferrer"&gt;qt_5.9_ui_doc&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;还是比直接写代码方便点。。。所以不妨学习一个！&lt;/p&gt;
&lt;p&gt;以及。。。qt在2017年6月１号发布了5.9。。。所以之前是5.8。。。现在变成5.9了。。。&lt;/p&gt;</description></item><item><title>qt 5.x初探　（４）　qt 在win下打包成exe</title><link>https://111qqz.com/en/post/acm-icpc/2017/2017-06-04-qt-5-notes-4/</link><pubDate>Sun, 04 Jun 2017 12:54:51 +0000</pubDate><guid>https://111qqz.com/en/post/acm-icpc/2017/2017-06-04-qt-5-notes-4/</guid><description>&lt;p&gt;des的基本搞定了。。。打包。。。&lt;/p&gt;
&lt;p&gt;在linux下打包成exe。。。。实在是。。没什么好办法的样子。。。&lt;/p&gt;</description></item><item><title>qt 5.x初探 （3）</title><link>https://111qqz.com/en/post/acm-icpc/2017/2017-05-18-qt-5-notes-3/</link><pubDate>Thu, 18 May 2017 12:47:20 +0000</pubDate><guid>https://111qqz.com/en/post/acm-icpc/2017/2017-05-18-qt-5-notes-3/</guid><description>&lt;p&gt;update3：&lt;/p&gt;
&lt;p&gt;终于知道了正确的学习姿势&amp;hellip;&lt;/p&gt;
&lt;p&gt;用百度把要用的东西大概描述出来，然后总能找到一个是你要的。。。&lt;/p&gt;</description></item><item><title>C++中头文件（.h）和源文件（.cpp）都应该写些什么（转载）</title><link>https://111qqz.com/en/post/acm-icpc/2017/2017-05-16-cpp-header-file-and-source-file/</link><pubDate>Tue, 16 May 2017 07:07:06 +0000</pubDate><guid>https://111qqz.com/en/post/acm-icpc/2017/2017-05-16-cpp-header-file-and-source-file/</guid><description>&lt;h3 class="relative group"&gt;
 &lt;div id="" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;感觉其实。。。更像是一种规范。。。？而不是一种具体要求吧。。。&lt;/p&gt;</description></item><item><title>qt 5.x 学习笔记　(2)</title><link>https://111qqz.com/en/post/acm-icpc/2017/2017-05-16-qt-5-notes-2/</link><pubDate>Tue, 16 May 2017 03:14:19 +0000</pubDate><guid>https://111qqz.com/en/post/acm-icpc/2017/2017-05-16-qt-5-notes-2/</guid><description>&lt;p&gt;先来放一波过程中用到的资料和官方文档好了。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://doc.qt.io/qt-5/qtwidgets-layouts-basiclayouts-example.html" target="_blank" rel="noreferrer"&gt;basic layout_qt5.8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://doc.qt.io/qt-5/qboxlayout.html" target="_blank" rel="noreferrer"&gt;QBoxLayout Class_qt5.8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://doc.qt.io/qt-5/qstring.html" target="_blank" rel="noreferrer"&gt;QString Class 5.8&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://doc.qt.io/qt-5/qchar.html" target="_blank" rel="noreferrer"&gt;QChar Class qt 5.8&lt;/a&gt;&lt;/p&gt;</description></item><item><title>qt 5.x　初探(1)</title><link>https://111qqz.com/en/post/acm-icpc/2017/2017-05-14-qt-5-notes-1/</link><pubDate>Sun, 14 May 2017 12:21:56 +0000</pubDate><guid>https://111qqz.com/en/post/acm-icpc/2017/2017-05-14-qt-5-notes-1/</guid><description>&lt;p&gt;嘛。。为了系统安全课来学一波qt&amp;hellip;&lt;/p&gt;
&lt;p&gt;现在算是写出了一个可以打开文件，保存文件的记事本。。。&lt;/p&gt;</description></item><item><title>C++ const 用法总结（转载）</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2017-03-18-cpp-const/</link><pubDate>Sat, 18 Mar 2017 12:22:32 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2017-03-18-cpp-const/</guid><description>&lt;p&gt;基本全文照搬了：&lt;a href="http://blog.csdn.net/eric_jo/article/details/4138548" target="_blank" rel="noreferrer"&gt;关于C++ const 的全面总结&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;总结全面还是要一点时间的orz..感谢原作者，暂时没发现有什么错误（?&lt;/p&gt;</description></item><item><title>C++ sort学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2017-03-01-cpp-sort/</link><pubDate>Wed, 01 Mar 2017 07:27:12 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2017-03-01-cpp-sort/</guid><description>&lt;p&gt;回想起大一的时候打cf&amp;hellip;那个时候对C++还不怎么熟悉。。。用sort不会自定义排序方式。。&lt;/p&gt;</description></item><item><title>cpp vector学习笔记</title><link>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2017-02-28-cpp-vector/</link><pubDate>Tue, 28 Feb 2017 07:21:49 +0000</pubDate><guid>https://111qqz.com/en/post/%E5%B7%A5%E7%A8%8B/cpp/2017-02-28-cpp-vector/</guid><description>&lt;p&gt;起因是百度实习二面的时候被问了一道类似这样的题：&lt;/p&gt;
&lt;p&gt;给我下面的代码，问有没有什么问题。&lt;/p&gt;</description></item><item><title>c++11 学习笔记</title><link>https://111qqz.com/en/post/acm-icpc/2016/2016-08-18-c11-e5ada6e4b9a0e7ac94e8aeb0/</link><pubDate>Thu, 18 Aug 2016 07:37:49 +0000</pubDate><guid>https://111qqz.com/en/post/acm-icpc/2016/2016-08-18-c11-e5ada6e4b9a0e7ac94e8aeb0/</guid><description>&lt;p&gt;昨天终于搞定了ycm对c++11的支持&amp;hellip;.&lt;/p&gt;
&lt;p&gt;嘛，17都快出来了，我竟然连11都不会用。&lt;/p&gt;</description></item><item><title>c语言中static的作用</title><link>https://111qqz.com/en/post/acm-icpc/2016/2016-01-11-ce8afade8a880e4b8adstatice79a84e4bd9ce794a8/</link><pubDate>Mon, 11 Jan 2016 06:55:04 +0000</pubDate><guid>https://111qqz.com/en/post/acm-icpc/2016/2016-01-11-ce8afade8a880e4b8adstatice79a84e4bd9ce794a8/</guid><description>&lt;p&gt;一般有两个&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;在这里，a与b都是全局变量，二者的区别是，b可以被别的文件使用，a只能在本文件中使用，这是static对全局变量的作用。&lt;/strong&gt;
** c和d的区别是，d是一个自动变量，func函数执行完后，d会自动被释放。但c却不会被释放，下一次调用func函数时，c的值会保留上次的值继续使用(而不是初始值0，初始化只会在函数第一次被调用的时候执行)**&lt;/p&gt;</description></item></channel></rss>