- 博客(18)
- 收藏
- 关注
原创 一个使用C++中的const例子
class SyncScheduler{public: SyncScheduler(string name) :_name(name){} //假设getName返回的是一个string型引用,由于函数本身是一个const型函数 //为了确保_name不会被改变,必须在返回值前加const //此时可以写一个非const的版本 const string&a...
2018-09-05 13:45:57
357
转载 细说 C++ Traits Classes
本文转载自 leehao.me https://blog.csdn.net/lihao21/article/details/55043881,感谢原作者的讲解。最近在看侯捷的《STL源码剖析》,看到第三章有关 traits 的介绍,被搞得一头雾水,看了半天不知所云。为了彻底了解这个技法的原理,硬着头皮上网查了资料,并结合 Scott Meyers 的 《Effective C++》,总算是把 ...
2018-09-03 10:54:40
287
原创 C++模板编程之: 函数重载与函数特例
/*C++标准中分辨重载的三个重要准则。准则一:两候选函数中如果有一方的形参列表与调用实参更匹配,则淘汰另一方。参数类型匹配规则一般考虑是:匹配度从高到低依此是,同等类型转换,标准类型转换,自定义类型转换同等类型转换 eg: char[]<=>char* , 实参char* 转换至const char*标准类型转换: int => long自定义类型转换: int=&...
2018-09-02 10:48:53
230
转载 WSAGetLastError() 返回的错误
下面列示了用户在 Windows 操作系统上使用 TCP/IP 时,可能最常遇到的错误代码。它不是完整的错误列表。可以在文件 winsock2.h 中找到 WSAGetLastError() 返回的错误。如果您未安装开发环境,则在您的系统上可能未安装此文件。在“Windows 套接字 2 应用程序编程接口”中说明了关于特定函数返回的错误的更多信息。可以从下列 Web 站点获取此规范的副本:http...
2018-06-23 10:58:54
1630
转载 关于POD类型
在阅读最后一战源码时,发现一个结构体名字中带了POD字样,才知道这是plain old data的缩写。那么关于什么是POD类型,下边的文章介绍很清楚,请参考https://blog.csdn.net/kongkongkkk/article/details/77414410以及https://www.cnblogs.com/tracylee/archive/2012/10/18/2730164.h...
2018-06-13 22:36:26
371
原创 多线程编程中的有状态(stateful)和无状态(stateless)以及可重入、不可重入
要写出线程安全的类和函数,有状态、无状态,可重入、不可重入这四个概念绕不开。什么是线程安全的类和函数呢?就是可以被多个线程调用而不会出现数据的错乱的类的对象和函数。导致线程不安全的根本原因是函数或类对象中使用了共享数据(类静态成员变量、全局变量等),由于没有对这些共享数据进行同步操作而导致数据错乱。根据这个原因就把函数或类分成下边两种情况:1.无状态的这类函数和类对象不包含任何其他作用域中的变量或...
2018-06-13 21:55:32
500
原创 std::string在vs中调试中不显示数值的问题
如上图所示,通常string字符串里的字符是看的到的,但有时调试中,string的值不可见,说明此字符串里有\0的字符存在,此时需要检查程序逻辑。
2018-06-13 16:31:36
3109
转载 多线程程序设计中的线程上下文切换
Context Switches 上下文切换,有时也被称为进程切换(process switch)或任务切换。是一个重要的性能指标。CPU从一个线程切换到另外一个线程,需要保存当前任务的运行环境,恢复将要运行任务的运行环境,必然带来性能消耗。Context Switches 上下文切换简介操作系统可以同时运行多个进程, 然而一颗CPU同时只能执行一项任务,操作系统利用时间片轮转的方式,让用户感觉这...
2018-06-13 13:36:52
668
转载 程序设计范式
转自孟岩博客https://blog.csdn.net/myan/article/details/5928531function/bind的救赎(上)程序设计有一个范式(paradigm)的问题。所谓范式,就是组织程序的基本思想。这个思想,反映了程序设计者对程序的一个基本的哲学观。也就是说,他认为程序的本质是什么,他认为一个大的程序是由什么组成的。而这,又跟他对于现实世界的看法有关。显然,这样的看...
2018-06-12 14:11:21
1433
原创 typename关键字用法
阅读某开源代码,利用模板特新创建一个指针池时,对下面的两行代码产生了困惑template<typename T>class NetPointerPool{public: typedef typename std::vector<T*> PointerList; // 1 typedef typename std::vector<T*>::iterato...
2018-06-05 14:35:45
1044
转载 有状态对象和无状态对象
1、线程安全 要搞清楚有状态对象和无状态对象,首先需要弄清楚线程安全的问题。如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,那么就是线程安全的。 或者说,一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考...
2018-06-05 11:09:12
174
原创 设置各编辑器tab键为4个空格
将TAB设置为4个空格的原因很多,其中一点是为了统一不同编译器(notepad++、vs、sourceinsight等)对TAB的解释,防止代码风格在不同编译器下不一致等。Notepad++:设置--首选项--语言--制表符设置--(勾选上)替换为空格vs下:在菜单中选择: 工具-->选项-->文本编辑器--->所有语言-->制表符在窗口中选择,制表符大小选为4,勾选插入空...
2018-05-31 10:15:23
5337
原创 VS2013 MFC there are no useable controls in this group
开发MFC程序,工具箱中无可用控件时,在Generral上右键选择 choose items后会从微软加载控件项,之后重启VS就行了
2018-05-24 11:50:27
452
原创 解决windows上mysql8.0 community版(MYSQL server has gone away)无法连接数据库问题
阅读某手游项目源码时,连接数据库阶段报错,报错如下图所示:显示 MYSQL server has gone away,网上看了些中文文章,前篇一律都指向连接超时或sql语句请求数据量过大等等,但我是首次编译链接,不存在这个情形。单步跟踪情况下,发现出错原因在mysql_real_connect执行上,错误原因是接下来找了两篇外文资料,第一篇解释了caching_sha2_password是啥,以及...
2018-05-18 19:42:10
928
原创 解决vs2015 未能正确加载visual c++ project system package
1.win10在卸载程序里找到vs2015的exe(几个G大小),点卸载后弹出当初安装界面,选择修复2.不要尝试网上乱七八糟的改xml,命令行操作的方法,修复就是了。3.如果此前装过vs2015的vc++运行库,注意下版本号,与update3关联的安装版本iso里的运行库版本是14.0.24215
2018-03-12 20:12:33
12120
1
原创 Ansi,UTF8,Unicode,ASCII编码的区别
近日需要不同的编码,关于上述编码,一直迷迷糊糊,查了些资料,总算大致了解了。下面全是从网上搜来的:1. ASCII和Ansi编码 字符内码(charcter code)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为 单字节内码 -- Single-Byte character sets (SBCS),可以支持256个字符编码.
2017-11-26 18:50:37
249
原创 DECLARE_HANDLE宏解析
在MFC源码中,经常看到这样的语句:DECLARE_HANDLE(HDRVR);DECLARE_HANDLE(HDTRCV);查看DECLARE_HANDLE定义如下:#ifdef STRICTtypedef void *HANDLE;#define DECLARE_HANDLE(name) \struct name##__ { int unused; };\ ty
2017-11-10 13:47:58
1082
原创 MFC的RTTI实现
《深入解析MFC》这类解剖MFC内部实现的书籍中提到了MFC的RTTI(运行时类型信息)记录由DECLARE_DYNAMIC和IMPLEMENT_DYNAMIC实现。先看看DECLARE_DYNAMIC宏的定义。如下:#define DECLARE_DYNAMIC(class_name)public: static CRuntimeClass class##class_
2017-10-19 09:57:10
315
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人