摘要:暂时先不更新前一篇文章了,感觉那个文章要写好久。累死。 今天说一说C++右值引用的一个问题。 这个问题的发现也是很偶然的。 来一段毫无意义但是能证明问题的代码: 请问控制台输出神马? 自己跑一跑看一看,然后咱们下一个结论: !!返回值不要搞成右值引用的样子!! 当然了,在这个简单的案例里面,你还能看
阅读全文
摘要:最近hen ci hen ci用C++写完了一整套证券行情系统,但是不是服务沪深交易所的,是给文交所用的。整个系统涵盖了从DBF文件解析开始到客户端展现这一整条逻辑。想来一年多没有更新博客了,所以趁这个机会,把整个系统的架构和开发中遇到的问题写下来,权当总结和分享。 首先要说明的是,整个系统的架构都
阅读全文
摘要:在C++里,一个函数如果其函数体实现中包含co_await、co_yield、co_return中任何一个关键字,那么这个函数就是一个coroutine。其中: 一个coroutine要能被编译期识别并通过编译,在某些情况下要自己去特化coroutine_traits。下面就一个简单的corouti
阅读全文
摘要:Visual C++对于C++标准的支持不是很完善好像是钦定了的。MS还特意在这里说了些非标准行为[1]以及扩展行为[2]。这就不可避免地会让处女座程序猿感到难受(我不是处女座)。所以,经过一番google/bing之后,你会找到一个很好的VC++编译选项/Za。 我们先来看看/Za选项是什么意思:
阅读全文
摘要:对比Go等其他语言的工程,C++工程让人痛苦的一件事情就是当工程稍微庞大一点,编译时间就蹭蹭蹭往上爬。一般来说看过Effective C++这本书或者其他类似书籍的人都知道要解决编译时长的问题,就要解决好和头文件之间的依赖关系。所以在任何必要的时候要首先考虑使用前置声明而不是之间include头文件
阅读全文
摘要:多线程的环境里,我们总不可避免要使用锁。于是一个常见的场景就是: 问题 多线程环境下该如何实现拷贝构造函数和移动构造函数呢? 要实现默认构造函数,没有挑战。使用成员初始化列表就可以: ObjectWithLock() : mtx_(), shared_res_() {} // 如果SomeResTy
阅读全文
摘要:前言 WPF的一大基础就是Data Binding。在基于MVVM架构的基础上,只有通过实现INotifyPropertyChanged接口的ViewModel才能够用于Data Binding。 要实现INotifyPropertyChanged接口,只需要实现一个事件,event Propert
阅读全文
摘要:概念 先说一说基本的概念,这包括什么是Unicode,什么是UTF-8,什么是UTF-16。 Unicode,UTF-8,UTF-16完整的说明请参考Wiki(Unicode,UTF-8,UTF-16)。用比较简单的话来说就是,Unicode定义了所有可以用来表示字符的数值集合(称之为Code Po
阅读全文
摘要:前一篇文章写得实在太挫,重新来一篇。 多线程环境下生命周期的管理 多线程环境下,跨线程对象的生命周期管理会有什么挑战?我们拿生产者消费者模型来讨论这个问题。 实现一个简单的用于生产者消费者模型的队列 生产者消费者模型的基本结构如下图所示: 如果我们要实现这个队列该怎么写?首先我们先简单挖掘下这个队列
阅读全文
摘要:如果你还在使用传统的C++,那么可以肯定堆内存的管理让你头痛过!在传统的C++领域,堆内存管理上我们能借用的现成工具就只有auto_ptr。但是很不幸用auto_ptr管理堆内存简直就是个错误。auto_ptr的问题可以归结为两点: 既然auto_ptr这么不好,那我们还有其他的选择么?这得感谢bo
阅读全文
摘要:去年年底的样子,何登成写了一篇关于C/C++ volatile关键字的深度剖析blog(C/C++ Volatile关键词深度剖析)。全文深入分析了volatile关键字的三个特性。这里不想就已有内容再做一遍重复,而是再提供一些自己的看法,以完善对volatile的全面认识。 前文一个很好的例子就是
阅读全文
摘要:终于可以在工作之余可以整理整理自己的知识网络了。最近正在花时间看别人整理好的关于C++ Idioms的相关内容,期间看到了Meyers关于如何界定你的函数应该是一个普通的函数,还是成员函数或者友元函数。牛人总结得就是到位,顺带就帖在这里。不过感觉没啥好解释的。 Given a class T and
阅读全文
摘要:最近转做服务端开发,或多或少有点坑爹的感觉。目前正在恶补Linux C/C++编程,主要还是集中在Linux系统API的学习。不过也好,以后更新的内容不仅仅只有Windows了。 今天说一点简单的东西,还是MFC的。不知道有多少人用过BEGIN_TEMPLATE_MESSAGE_MAP,没用过的可以
阅读全文
摘要:vector<T>标准库模版类应该是绝大多数c++程序员使用频率比较高的一个类了。不过vector<bool>也许就不那么被程序员所了解。关于vector<bool>不尝试研究一番,一般还不太容易知道其中蕴含的问题。 首先得明确一点,那就是vector<bool>是vector<T>的特化版。这个特
阅读全文
摘要:Windows APC 首先我们要知道什么是APC。APC的全称是Asynchronous Procedure Call,异步过程调用。MSDN链接请猛击这里。用简短的话来总结就是: 每一个线程都有一个APC队列 APC分两种,分别是kernel-mode APC和user-mode APC 通过调
阅读全文
摘要:写Windows程序不可避免要使用自定义的消息,也就是从WM_USER开始定义的消息。在定义一个消息后,往往我们还要定义针对该消息的WPARAM甚至是LPARAM。WPARAM和LPARAM是什么,可以参考MSDN的SendMessage或者WindowProc。归结成一点就是对应消息的额外附带信息
阅读全文
摘要:Win32编程中GDI相关的东西肯定是每个程序员都要接触的东西,如果平时项目还是以MFC为基础的话,那就更不必说了。但是即便如此要用好GDI还是非常不容易的一件事情。 想必每个MFC的程序员可能都接触过CPPToolTip这个开源库工具,不得不说这是一个用起来很不错的tip工具类。但是要如何用好却也
阅读全文
摘要:最近在看一些并行编程相关的内容,经常碰到两个单词:concurrency和parallelism。一直没有搞明白这两个词到底啥区别,总感觉是一样的。所以,google是必须的。不过不管是Stack Overflow还是其他搜索结果,个人总觉得说明得不够让人好理解。今天看书,算是看到一份个人觉得非常完
阅读全文
摘要:做了好一阵子的UI自动化,今天来总结总结。先说比较简单一点的以HWND为基础的Win32 UI自动化。 很多人的UI自动化应该是从自动化HWND开始,总体来说入门比较简单,至少接触的都是Win32 API,而且可以不用接触COM相关的东西。说了那么久,进入正题。 UI自动化,至少要处理下面几样东西:
阅读全文