C/C++/Assembly
文章平均质量分 96
张小方32
这个作者很懒,什么都没留下…
展开
-
C++ 惯用法 CRTP 简介
答案也很简单:让 CRTP 的模板类继承一个非模板的基类——这相当于这个非模板的基类会有多个平级的不同的子类。文章开头的第一段,我们提到多态是个很好的特性,但是动态绑定比较慢,因为要查虚函数表。为了在编译时绑定,我们就需要放弃 C++ 的虚函数机制,而只是在基类和子类中实现同名的函数;同时,为了在编译时确定类型,我们就需要将子类的名字在编译时提前传给基类。这种特性,使得我们能够用基类的指针,访问子类的实例。指向对象的类型在运行时才确定(而不是在编译时就确定),所以这种方式称为动态绑定(或者运行时绑定)。原创 2023-11-23 16:29:12 · 126 阅读 · 0 评论 -
#pragma execution_character_set("utf-8")
#if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif原创 2019-11-26 12:03:54 · 4078 阅读 · 0 评论 -
C++中的单例模式
单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。 单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到转载 2015-06-19 12:33:46 · 734 阅读 · 0 评论 -
C++ new失败的处理
C++ new调用失败,不应该判断返回值是否为NULL,这样做在较新的编译器中没有意义。原创 2015-06-04 17:50:29 · 1775 阅读 · 0 评论 -
vector.resize 与 vector.reserve的区别
std::vector的reserve和resize的区别 1. reserve: 分配空间,更改capacity但不改变size 2. resize: 分配空间,更改capacity也改变size如果知道vector的大小,resize一下可以当数组来用,不会分配多余的内存。reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用原创 2015-06-15 16:58:54 · 1467 阅读 · 0 评论 -
不要在公共接口中传递STL容器
最近的一个项目,是开发一个framework,提供给公司内部不同的产品线使用。 之间遇到的一个问题,就是STL容器的使用, 而结论是不要在公共接口中传递STL容器:这里说的STL容器,但主要则是指容器,字符串类,但其实可以推广到在STL中提供的任何类型, 这里说的公共接口,是指需要暴露给客户的sdk头文件,包括函数签名,或者类成员变量; 也可以说,不要在暴露给客户的头文件中包含STL的头文件。原原创 2015-06-15 16:57:25 · 1008 阅读 · 0 评论 -
64位无符号整形格式化符号
%llu 是64位无符号(在VS2008中测试通过)说明:%lu不对原创 2015-10-13 16:22:14 · 2361 阅读 · 0 评论 -
关于scanf与printf里的%*d
看如下程序:include123初学者会问:%*d的作用不是跳过对应的输入数据吗? 是的,在scanf函数里的确是这样的,比如:include原创 2016-08-24 14:09:21 · 714 阅读 · 0 评论 -
将char* 赋值给std::string的一些陷阱
这段时间,总是要使用char或者char* 赋值给std::string,踩了不少坑。于是写了个测试代码:#include #include using namespace std;int main(int argc, char* argv[]){ string str1; cout << "str1:" << str1 << " length: " << str原创 2017-05-12 16:30:56 · 37032 阅读 · 0 评论 -
将NULL指针赋值给std::string变量导致程序崩溃
如题:如上图,但是我们还会经常写这样的代码,例如我的flamingo中有代码如下(已经修正):位于queryresult.cpp中如果fields[i].name为NULL的话,程序将崩溃。备忘一下,以后将char*类型赋值给std::string类型一定记得检测一下是否为空指针。...原创 2018-04-26 14:44:35 · 3980 阅读 · 1 评论 -
URLEncode和Decode算法代码
bool UrlEncode(const string& src, string& dst){ if(src.size() == 0) return false; char hex[] = "0123456789ABCDEF"; size_t size = src.size(); for (size_t i = 0; i < size; ++i)...原创 2016-12-01 09:27:47 · 3761 阅读 · 0 评论 -
std::shared_mutex和std::mutex的性能对比(benchmark)
原文作者:@玄冬Wong转载请注明原文出处:http://aigo.iteye.com/blog/2296462key world: std::shared_mutex、std::mutex、performance、benchmark、性能测试shared_mutex的适用场景比较特殊:一个或多个读线程同时读取共享资源,且只有一个写线程来修改这个资源,这种情况下才能从shared_mutex...原创 2019-07-31 14:50:06 · 8670 阅读 · 0 评论 -
ARRAYSIZE宏与RtlpNumberOf的区别
// test_RtlpNumberOf.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include templatelong f1(T (&t)[N]){ //typedef T zz; //typedef T zz[N]; //zz a; return原创 2015-01-29 14:40:36 · 1715 阅读 · 0 评论 -
stl std::map容器排序及使用注意事项
#include "stdafx.h"#include #include int _tmain(int argc, _TCHAR* argv[]){ /** * map中的每个元素都是一个pair类型 * 对于插入其中的元素都会默认按键值升序排列好 */ std::map m; m.insert(std::pair(1, 20)); m.insert(std::p原创 2014-11-05 12:44:12 · 5454 阅读 · 0 评论 -
#pragma code_seg
在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma 指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的, 且对于每个编译器都是不同的。其格式一般为: #Pragma Para 其中Para 为参数,下面来看一些常用转载 2012-10-21 19:23:24 · 2296 阅读 · 0 评论 -
linux下与windows下的换行符
回车符号和换行符号产生背景 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。转载 2012-10-26 13:12:34 · 1403 阅读 · 0 评论 -
VC中出现“烫”和“屯”的原因
文章内容请参见:http://www.programlife.net/why-output-tang-at-debug-in-vc.html原创 2012-10-26 13:23:46 · 1435 阅读 · 1 评论 -
如何检测C/C++程序内存泄露
参考1: http://blog.csdn.net/susubuhui/article/details/7640865 参考2: http://www.codeproject.com/Articles/108529/LeakDiag-An-Effective-Memory-Leak-Analysis-Tool原创 2013-02-25 23:24:39 · 1554 阅读 · 0 评论 -
关于security cookie
这里主要讨论栈,不是堆。 首先,security cookie并不是windows系统自带的保护机制,并不是说一个确实存在溢出漏洞的程序,放到带security cookie保护的环境中,就不能正常溢出了。 那么,到底是什么是security cookie呢? 我觉得从广义上讲,它应该是一种保护栈的机制,提供这种保护的,是程序本身,编译进程序本身的代码提供的,而不是系统中某个转载 2013-06-15 15:21:37 · 1673 阅读 · 0 评论 -
fpu,mmx以及sse寄存器的少量简介
FPU: 8个80位浮点寄存器(数据),16位状态寄存器,16位控制寄存器,16为标识寄存器。 使用FPU指令对这些寄存器进行操作,这些寄存器构成一个循环栈,st7栈底,st0栈顶, 当一个值被压入时,被存入st0,原来st0中的值被存入st7MMX: 将8个FPU寄存器重命名为8个64位MMX寄存器,即mm0到mm7。[号称多媒体处理技术] 57条MMX指转载 2013-06-15 23:31:24 · 3778 阅读 · 0 评论 -
汇编练习
我常常在想一些莫名其妙的问题,走路也想,吃饭也想,睡觉也想,先看段代码:00BE1380 push ebp 00BE1381 mov ebp,esp 00BE1383 sub esp,0D8h 00BE1389 push ebx 00BE138A push esi 00原创 2013-06-16 11:10:06 · 1199 阅读 · 0 评论 -
关于WM_COMMAND与WM_NOTIFY
声明:原文来自MSDN 2001 Oct版,原文内涉及的连接由于是脱机连接,所以译文内的连接是本人尽量找自MSDN online)TN061: ON_NOTIFY and WM_NOTIFY Messages这个技术文章介绍了关于新WM_NOTIFY消息,还描述了建议使用的一种在你的MFC应用程序中处理WM_NOTIFY消息的方法。Windows 3.x 的 通告消息在Window转载 2013-07-12 12:04:34 · 1592 阅读 · 0 评论 -
InitCommonControlsEx调用失败,manifest作怪
最近在VC编程时,调用 InitCommonControlsEx失败。究其原因,是 manifest作怪。 解决方案有三:1) Create manifest, call it YourApplicationName.manifest and add it to your application folder.2) Create manifest and add it to y转载 2013-07-12 10:35:45 · 1295 阅读 · 0 评论 -
一个GUI程序如何创建一个控制台程序(CUI)
参考资料:http://www.cnblogs.com/linucos/archive/2012/09/10/2678972.html 下面这段代码演示GUI程序如何与它的控制台进行交互,包括向控制台输出字符和从控制台获取输入的字符。 void CreateConsole(){ wchar_t szOutputTest[MAX_PATH] = L"晚春 韩愈\n草木知春不久归,原创 2013-11-01 11:09:57 · 1798 阅读 · 0 评论 -
解决error LNK2005
文章参见:http://blog.sina.com.cn/s/blog_5db7b05a0100bek3.html转载 2014-02-28 23:53:03 · 1153 阅读 · 0 评论 -
C语言的井号(#)特殊用法(#define)
一:特殊的字符串宏[cpp]#define A(x) T_##x #define B(x) #@x #define C(x) #x 我们假设x=1, 则上面的宏定义会被解释成以下的样子A(1)------>T_1B(1)------>'1'C(1)------>"1"这些主要用于一些字符串处理函数和参数命名上,并不复杂,不过知者甚少二转载 2014-03-30 10:45:42 · 3687 阅读 · 0 评论 -
底层的MDI程序是如何建立的
代码示例:// MDIAppDemo.cpp : Defines the entry point for the application.//#include "stdafx.h"#include "MDIAppDemo.h"#define ID_FIRSTWINDOW 50000typedef struct tagHELLODATA{UINT iColorIndex;COLORREF clr原创 2014-10-04 10:39:45 · 894 阅读 · 0 评论 -
关于Visual C++ 2008中wprintf和wprintf_s输出中文乱码问题
最近写编码转换库,发现MB编码转换成 Unicode 后,中文总是乱码。起初以为是自己写错了,但测试后发现转换结果是完全正确的。再测试一下,发现居然连常字符串都不能正常输出……CharWucs2s[] = L"我fsf我safas";wprintf(L"%s\r\n",ucs2s);输出结果:?fsf?safas带着疑转载 2012-10-30 14:45:32 · 1724 阅读 · 0 评论