自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hxd's blog

点滴记录,学以致用

  • 博客(37)
  • 资源 (10)
  • 收藏
  • 关注

原创 C#连接mysql出现【给定关键字不在字典中】问题解决

之前,在Ubuntu服务器上安装的mysql-server,本地写了一个客户端(C#),当时开发完成后没什么问题。最近服务器面临更换,需要把数据备份和恢复到新服务器。等数据都恢复完了,发现之前的客户端程序连接mysql有问题,总是产生异常:给定关键字不在字典中。网上搜了很多帖子,大多都是说编码格式问题,查看mysql都是utf8mb4,连接时指定的编码为 utf8。按照网上说的:1)修改数据库的编码格式,有好多地方都要修改,修改可能引起其他问题;2)修改程序里连接字符串编码,试了不行。后来发现,客户端连接原

2022-07-12 15:47:31 4913 2

转载 直接初始化与复制初始化的区别

对于其中最后一点,多使用直接初始化,有很多读者向我提出了疑问,并写了一些测试程序,来说明直接初始化与复制初始化是同一件事。让我了解到大家对于直接初始化与复制初始化的区别的确是不太清楚,无可否认,那篇文章的例子用得的确不太好,在这里表示歉意!所以我觉得还是有必要跟大家详细分享一下我对直接初始化和复制初始化的理解。一、Primer中的说法首先我们来看看经典是怎么说的:“当用于类

2014-06-04 17:42:10 770

转载 虚函数工作原理 与 (继承中)对象占用空间大小

一、虚函数的工作原理      虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数。典型情况下,这一信息具有一种被称为 vptr(virtual table pointer,虚函数表指针)的指针的形式。vptr 指向一个被称为 vtbl(virtual table,虚函数表)的函数指针数组,每一个包含虚函数的类都关联到 vtbl。当一个对象调用了虚函数,

2014-03-26 22:07:07 990

原创 从一个例子看内存布局

先看一个例子:(Win32 VS平台)第一种情况:class Base{public:virtual void Func1() {};};class Derived: public Base{public:virtual void Func2() {};};请问,sizeof(Derived)==?相信这个很多人都可以知道答案

2014-03-04 11:41:49 832

原创 IDE技巧合集

1. VC/VS(1)  查看结构体或类的内存布局:在Project Properties->C++->Command Line->Additional Options里面加上/d1reportSingleClassLayoutDerived,其中Derived为要查看的类。

2014-03-04 11:02:14 600

转载 LIB和DLL的区别

首先说一下静态链接库、动态链接库和COM1.动态链接库与静态链接库的区别。   1.1 静态链接库作为代码的一部分,在编译时被链接。          1.2 动态链接库有两种使用方式:      一种是静态加载,即在应用程序启动时被加载;      一种是动态加载,即是该动态链接库在被使用时才被应用程序加载。2.动态链接库和COM组件的区别         2.1

2014-02-21 14:53:41 585

转载 二叉树——已知前(后)序遍历和中序遍历,求解树

这种题一般有二种形式,共同点是都已知中序序列。如果没有中序序列,是无法唯一确定一棵树的,证明略。一、已知二叉树的前序序列和中序序列,求解树。1、确定树的根节点。树根是当前树中所有元素在前序遍历中最先出现的元素。2、求解树的子树。找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元素就是右子树。若根节点左边或右边为空,则该方向子树为空;若根节点左边和右边都

2014-01-14 20:42:45 792

转载 函数调用约定:__cdecl,__stdcall,__fastcall,__thiscall

1. __stdcall调用 __stdcall 是Standard Call的缩写,是C++的标准调用方式,也是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,如果是调用类成员的话,最后一个入栈的是 this指针。这些堆栈中的参数由被调函数自身在返回前清空,使用的指令是 retn X,X表示参数占用的字节数,CPU在ret之后自动弹出X个字节的堆栈空间。称为自动清栈。WIN3

2014-01-14 11:33:55 809

原创 数据结构中的运算规律

1. 求后缀表达式人工转换方法:例如:中缀表达式:a+b*c-(d+e)第一步:按照运算符的优先级对所有的运算单位加括号:式子变成了:((a+(b*c))-(d+e))第二步:把运算符号移动到对应的括号后面则变成了:((a(bc)* )+ (de)+ )-第三步:把括号去掉:abc*+de+- 后缀式子出现前缀表达式是一样的求,即第二部把运算符移动到括号前面

2014-01-09 16:49:08 810

原创 C++点滴拾遗

1. 成员变量的初始化顺序,与构造函数中初始化列表的顺序无关,与成员变量申明的顺序一致;多继承中,基类的构造顺序,与派生类的构造函数初始化列表中基类的构造顺序无关,与定义派生类时基类的申明顺序有关;2.友元关系不能继承。3.指针和typedeftypedef int * PINT;int i = 1;const PINT pi = &i; // 相当于

2013-11-04 11:23:57 707

转载 C++内联函数

C++内联函数(Inline)(普通函数、宏)  (1)什么是内联函数?内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。(2)为什么要引入内联函数?首先,为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址

2013-07-12 08:46:36 691

原创 数据格式之间与类型之间的转换方法

1. 16位数据与32位数据字节序倒序排列typedef unsigned short uint16;typedef unsigned int uint32;uint16 EndianSwap16(uint16 x){ return (x & 0x00ff) > 8;}uint32 EndianSwap32(uint32 x){ return (x

2013-05-09 15:07:37 727

转载 C语言运算符优先级表

1.C语言运算符优先级运算符按照优先级大小由上向下排列,在同一行的运算符具有相同优先级。第二行是所有的一元运算符。 运算符解释结合方式() [] -> .括号(函数等),数组,两种结构成员访问由左向右! ~ ++ -- + - * & (类型) sizeof否定,

2013-05-07 19:39:25 693

转载 Windows进程间通信的方式

1 文件映射文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待。因此,进程不必使用文件I/O操作,只需简单的指针操作就可读取和修改文件的内容。Win32 API允许多个进程访问同一文件映射对象,各个进程在它自己的地址空间里接收内存的指针。通过使用这些指针,不同进程就可以读或修改文件的内容,实现了对文件中数据的共享。应用程序

2013-04-01 16:35:24 700

原创 博客网址摘录

多线程与多进程详细介绍:http://blog.csdn.net/haiou0/article/details/6894735Linux/Windows下线程/进程通信机制比较:http://blog.csdn.net/wonderwander6642/article/details/8008241秒杀多线程系列:http://blog.csdn.net/column/details/

2013-04-01 16:27:51 728

原创 常见算法锦集

1. 字符串转化为整型int charToInt(const char* str){ if (str == NULL) return 0; int flag = 1; if ( *str == '+' ) { ++str; } else if (*str == '-') { flag = -1; ++str; } int n = 0; while ( *st

2013-03-20 10:44:04 1121

原创 如何计算结构体所占内存大小

#以下所述是按照Win32平台下VC编译器中的规则来判断 要求结构体的大小需要我们理解编译器的是如何布局对象的内存结构,也就是如何进行字节对齐。我把字节对齐的分为两步:1. 求“有效对齐值”a). 先求成员中“最大对齐值”,即成员中最大成员的大小,如果成员中含有结构体A,则是A中最大成员的大小。b). 求“指定对齐值”,编译器默认为8,可以通过#pragma pack (v

2013-02-18 16:08:55 2488 1

转载 C++ 四个类型转换符的用法

C++的四个类型转换运算符已经有很久了,但一直没有弄清楚它们的用法,今天看到一本书上的解释,才大致地的了解了其具体的用法.具体归纳如下:1. reinterpret_cast函数将一个类型的指针转换为另一个类型的指针.这种转换不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可做到.reinterpret_cast 可以将指针值转换

2013-01-17 10:14:46 555

原创 C++面试题解答 (一)

C++面试题解答(持续更新中......)-------------------------------------------------------------------------------------------------------------1. static成员函数可以访问non-static成员变量吗?为什么?不能,因为non-static成员变量是依赖于对象而存

2012-12-26 19:24:31 555

转载 也谈跳槽

跳槽的学问不在一个跳字,而在于长期的职业生涯规划。跳槽可以帮助职业生涯更上一层楼,而跳槽之所以能够成功,也是因为以往有了较好的职业生涯规划。什么决定了程序员的价格所谓的职业就是企业和员工之间的价值交换。企业付出薪水,福利来雇用员工,以期通过员工的劳动来实现企业的目标。员工付出劳动,技术,以期通过在企业中的劳动来实现自己的目标。当双方都觉得收获大于付出的时候,交换就会产生,于是供需双

2012-11-29 10:22:34 645

转载 UML各种对象、关系表示方法

大话设计模式上面的UML类图: 类的UML表示动物 的矩形框 表示是一个类。类图分为三层,第一层显示类的名称,如果是抽象类,则用斜体表示;第二层是类的特性,通常就是类的字段和属性;第三层显示类的操作,通常就是方法或行为。前面的“+”表示是public,“-”表示是private,“#”表示是protected。接口的UML表示接口的UML表示与类图的区别主要是顶

2012-11-27 16:31:45 1978

转载 C++常用数据类型转换

一、其他数据类型转化为字符串 char temp[200]; 1 短整型(int i) itoa(i,temp,10); \\将i转化为字符串放入temp中,最后一个数字表示十进制 itoa(i,temp,2); \\将i转化为字符串放入temp中,最后一个数字表示二进制2 长整形(long l) ltoa(l,temp,10); \\将l转化为字符串放入temp中,最

2012-11-27 15:56:26 562

原创 如何理解小端(Little-endian)与大端(Big-endian)

大家可能都知道字节序里大端和小端的意思和作用。标准的Big-Endian和Little-Endian的定义如下:a)Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。b)Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。比如数字0x12345678在两种不同字节序CPU中的存储顺序如下所示:Big E

2012-10-22 15:45:00 947

原创 几种常见设计模式区别与优缺点

按照GoF上面写的设计模式分为三大类:1. 创建型模式(1) 工厂模型: 大概可以分为3种。a) 简单工厂模式优点: 只有一个工厂类,结构简单 缺点: 不完全符合OCP开放封闭原则(扩展应开放,修改应封闭),要增加一个新的产品类,必须相应修改工厂类的方法。b) 工厂方法模式优点: 可扩展性好,不用修改原始工厂类,增加一个工厂子类即可。缺点: 相比简单工厂模式,增加了

2012-10-18 17:04:27 8435

转载 同步/异步 与 阻塞/非阻塞的区别

我喜欢用自己的语言通过联系现实生活中的一些现象解释一些概念,当我能做到这一点时,说明我已经理解了这个概念.今天要解释的概念是:同步/异步与阻塞/非阻塞的区别.这两组概念常常让人迷惑,因为它们都是涉及到IO处理,同时又有着一些相类似的地方.首先来解释同步和异步的概念,这两个概念与消息的通知机制有关.举个例子,比如我去银行办理业务,可能选择排队等候,也可能取一个小纸条上面有我的

2012-10-11 17:34:23 532

转载 临界区、互斥量、信号量、事件的区别

四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。临界区(Critical Section)(同一个进程内,实现互斥)保证在某一时刻

2012-10-11 15:27:04 1088

原创 C++中浅拷贝和深拷贝的区别

C++中拷贝对象有浅拷贝与深拷贝两种:浅拷贝是指复制对象时,对于对象中的数据成员按位进行拷贝,数据的值都一摸一样。对于简单数据成员进行值拷贝这个没有问题,但是对于动态数据成员(指向堆对象的指针),不能简单的进行值拷贝,必须要重新分配动态空间。否则,两个对象的析构函数将对同一个内存空间释放两次,产生运行时错误。对于动态数据成员的重新分配动态空间,这种叫做深拷贝。 当类不定义拷贝构

2012-08-08 10:43:26 2008

原创 volatile 与 explicit 的含义

volatile 是用来限制编译器对变量的优化,即禁止读取缓存或寄存器中的数据,每次使用的时候必须重新从变量地址中读取数据。这样可以避免以下三种情况产生的数据不同步:1).硬件寄存器可修改变量;2).中断服务子程序中会访问到的非局部变量;3).多线程中被共享的变量; explicit含义C++类中,若构造函数只有一个参数,则当对象进行=初始化时,有一个隐式转换,将该构造

2012-07-17 09:51:06 916

原创 利用局部变量作用域自动释放资源

我们都知道,局部变量在离开它自身作用域时会调用析构函数。利用这点,定义一个类,把内存的分配放入构造函数(通过传参)中,内存的释放放入析构函数中,这样就可以完成内存的自动释放。

2012-05-21 15:33:09 1446

转载 数组名a和&a的不同

有一段程序如下:#include void main(){     int a[2][3];     int**p=a;}请问为什么是错误的??(请不要说数组名是一个指针这个我知道,我想知道为什么不能用二级指针指向二维数组) 本来不想写什么的,但是看看,我觉得都没有我想要的答案,于是我像楼主推荐我的拙见。其实这个数组与指针的问题,要写的话,一句话,两句话是将

2012-02-23 11:28:09 1697 2

原创 const char * 相关的东东

1. const char * 与 char *(1) const char * 不能直接赋值给char *:假如可以的话,,那么通过char*就可以修改const char指向的内容了,这显然是自相矛盾的。      如果非要把const char *的值赋给char *, char*可以开辟新的内存空间,用strcpy()拷贝过去;        例如:      void m

2012-02-21 16:59:05 537

原创 C++面试中不怎么注意和比较怪的一些问题

1.为什么构造函数不能是虚函数?答:首先,我们要了解虚函数表vtable和虚函数指针vptr,vtable是for类的,vptr是for对象的,是在构造函数被调用时才初始化,当编译器为这个构造函数产生代码时,它是为这个类的构造函数产生代码--既不是为基类,也不是为它的派生类。所以它使用的vptr必须是对于这个类的vtable。而且,只要它是最后的构造函数调用,那么在这个对象的生命期内,vptr将保持指向这个vtable,但如果接着还有一个更晚派生的构造函数被调用,这个构造函数又将设置vptr指向它的vtab

2011-03-09 19:30:00 657

原创 用于堆内存检测的宏

<br />__UHEAP_MAEK 这个宏标记着开始检测用户的堆使用情况了 <br />__UHEAP_CHECK(n) 检测kernel堆是否已经分配了n个堆单元(没有被释放),这要在__UHEAP_MARK宏前使用。 <br />__UHEAP_CHECKALL(n) 检测当前线程的堆是否已经分配了n个堆单元。 <br />__UHEAP_MARKEND 这个宏标记着堆检测的结束,检测在__UHEAP_MARK之后是否有些已分配但没有及时释放的堆单元存在。 <br />__UHEAP_MAEKENDC

2010-08-02 14:39:00 627

原创 C++中四种强制类型转换操作符之间的区别

先介绍const_cast和reinterpret_cast:      const_cast用于消除类型中的const, volatile, __unaligned属性。      reinterpret_cast主要用于转换不相容的数据类型,特别是在指针类型和非指针类型之间进行转换,当然它也可以用于转换指针之间的转换。再介绍一对相对立的static_cast和dynamic_cast:      它们都是c++风格的强制类型转换,不过不具备上面2中转换的特性,即:不能在指针类型和非指针类型之间进行转换,

2010-06-10 16:00:00 1031

原创 Qt学习笔记(1)­——Qt对象数据成员的存储

<br />今天在网上看了一篇博客,关于Qt的底层机制的,做Qt开发不久,原来也就是一直调用上层的做做界面。觉得Qt对象的数据成员的储存的方式,思想还是很值得借鉴。<br />首先,Qt的数据成员不是像我们一般的那样:每个都罗列在类的private中,它是把它定义成一个数据结构体的指针。<br />其次,都知道Qt的类都是从QObject派生,它的数据成员中有一个QObjectData*,这是一个虚基类指针,而QObject的一个构造函数参数是QObjectPrivate*,QObjectPrivate这个

2010-06-04 17:17:00 2707

原创 Qt界面中文化

<br /><br />我们做的Qt界面程序上面的元素都是英文的,比如文件对话框的按钮都是"Open"、"Cancel"之类的,如果要翻译所有的界面元素,则必须安装Qt提供的翻译器QTranslator.<br />最好在程序的QApplication 对象初始就安装,代码如下:<br /><br />QTranslator trans(0);<br />trans.load("qt_zh_CN.qm", ".");<br />a.installTranslator(&trans);<br /><br />

2010-06-04 16:56:00 1210

原创 用Qt树型控件做文件浏览器的简单实现

#include int main(int argc, char *argv[]){    QApplication app(argc, argv);    QDirModel model;    QTreeView tree;    tree.setModel(&model);    // Demonstrating look and feel features    tree.setAnimated(false);    tree.setIndentation(20);    tree.setSorti

2010-06-03 14:01:00 4726

聊天程序-服务端

用MFC做的简单的聊天程序(server端)。

2014-05-17

SocketClient

自己写的简单的聊天程序,采用异步socket完成。

2014-03-28

Effective C++中文版.侯捷译

每个C++程序员都应该读的经典著作,不多说,谁看谁知道...

2012-08-18

自己整理的VC实用源码总结

分类整理了VC常用操作的源码示例,很实用哦

2012-08-18

Visual C++ 6.0 用户界面制作技术与应用实例

介绍MFC下如何制作界面,详细讲解包括菜单、状态栏、进度条、对话框、多视图、GDI等等,并有相关的实例介绍。

2012-08-13

《Windows网络编程技术》

很详细的关于windows socket网络编程教程,高清版。

2012-08-13

程序员面试宝典(第一版)

针对C/C++程序员面试过程中经常遇到的问题,进行详细解答。

2009-04-03

VC++应用技巧与常见问题解答

本书有针对性的解答了C++中的一些重要且容易混淆的概念,同时介绍了VC的一些操作技巧与编程技能。相信你一定会受益匪浅。

2008-10-16

高质量C++编程指南

关于C++编程的一些规范与习惯,使程序更加简洁、高效。

2008-09-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除