![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
东东0615
C++软件开发
展开
-
C++中四种强制类型转换操作符之间的区别
先介绍const_cast和reinterpret_cast: const_cast用于消除类型中的const, volatile, __unaligned属性。 reinterpret_cast主要用于转换不相容的数据类型,特别是在指针类型和非指针类型之间进行转换,当然它也可以用于转换指针之间的转换。再介绍一对相对立的static_cast和dynamic_cast: 它们都是c++风格的强制类型转换,不过不具备上面2中转换的特性,即:不能在指针类型和非指针类型之间进行转换,原创 2010-06-10 16:00:00 · 1033 阅读 · 0 评论 -
如何理解小端(Little-endian)与大端(Big-endian)
大家可能都知道字节序里大端和小端的意思和作用。标准的Big-Endian和Little-Endian的定义如下:a)Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。b)Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。比如数字0x12345678在两种不同字节序CPU中的存储顺序如下所示:Big E原创 2012-10-22 15:45:00 · 952 阅读 · 0 评论 -
直接初始化与复制初始化的区别
对于其中最后一点,多使用直接初始化,有很多读者向我提出了疑问,并写了一些测试程序,来说明直接初始化与复制初始化是同一件事。让我了解到大家对于直接初始化与复制初始化的区别的确是不太清楚,无可否认,那篇文章的例子用得的确不太好,在这里表示歉意!所以我觉得还是有必要跟大家详细分享一下我对直接初始化和复制初始化的理解。一、Primer中的说法首先我们来看看经典是怎么说的:“当用于类转载 2014-06-04 17:42:10 · 781 阅读 · 0 评论 -
虚函数工作原理 与 (继承中)对象占用空间大小
一、虚函数的工作原理 虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数。典型情况下,这一信息具有一种被称为 vptr(virtual table pointer,虚函数表指针)的指针的形式。vptr 指向一个被称为 vtbl(virtual table,虚函数表)的函数指针数组,每一个包含虚函数的类都关联到 vtbl。当一个对象调用了虚函数,转载 2014-03-26 22:07:07 · 1006 阅读 · 0 评论 -
从一个例子看内存布局
先看一个例子:(Win32 VS平台)第一种情况:class Base{public:virtual void Func1() {};};class Derived: public Base{public:virtual void Func2() {};};请问,sizeof(Derived)==?相信这个很多人都可以知道答案原创 2014-03-04 11:41:49 · 838 阅读 · 0 评论 -
C++中浅拷贝和深拷贝的区别
C++中拷贝对象有浅拷贝与深拷贝两种:浅拷贝是指复制对象时,对于对象中的数据成员按位进行拷贝,数据的值都一摸一样。对于简单数据成员进行值拷贝这个没有问题,但是对于动态数据成员(指向堆对象的指针),不能简单的进行值拷贝,必须要重新分配动态空间。否则,两个对象的析构函数将对同一个内存空间释放两次,产生运行时错误。对于动态数据成员的重新分配动态空间,这种叫做深拷贝。 当类不定义拷贝构原创 2012-08-08 10:43:26 · 2012 阅读 · 0 评论 -
函数调用约定:__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 · 817 阅读 · 0 评论 -
C++内联函数
C++内联函数(Inline)(普通函数、宏) (1)什么是内联函数?内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内。(2)为什么要引入内联函数?首先,为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址转载 2013-07-12 08:46:36 · 699 阅读 · 0 评论 -
C语言运算符优先级表
1.C语言运算符优先级运算符按照优先级大小由上向下排列,在同一行的运算符具有相同优先级。第二行是所有的一元运算符。 运算符解释结合方式() [] -> .括号(函数等),数组,两种结构成员访问由左向右! ~ ++ -- + - * & (类型) sizeof否定,转载 2013-05-07 19:39:25 · 707 阅读 · 0 评论 -
如何计算结构体所占内存大小
#以下所述是按照Win32平台下VC编译器中的规则来判断 要求结构体的大小需要我们理解编译器的是如何布局对象的内存结构,也就是如何进行字节对齐。我把字节对齐的分为两步:1. 求“有效对齐值”a). 先求成员中“最大对齐值”,即成员中最大成员的大小,如果成员中含有结构体A,则是A中最大成员的大小。b). 求“指定对齐值”,编译器默认为8,可以通过#pragma pack (v原创 2013-02-18 16:08:55 · 2498 阅读 · 1 评论 -
volatile 与 explicit 的含义
volatile 是用来限制编译器对变量的优化,即禁止读取缓存或寄存器中的数据,每次使用的时候必须重新从变量地址中读取数据。这样可以避免以下三种情况产生的数据不同步:1).硬件寄存器可修改变量;2).中断服务子程序中会访问到的非局部变量;3).多线程中被共享的变量; explicit含义C++类中,若构造函数只有一个参数,则当对象进行=初始化时,有一个隐式转换,将该构造原创 2012-07-17 09:51:06 · 926 阅读 · 0 评论 -
C++ 四个类型转换符的用法
C++的四个类型转换运算符已经有很久了,但一直没有弄清楚它们的用法,今天看到一本书上的解释,才大致地的了解了其具体的用法.具体归纳如下:1. reinterpret_cast函数将一个类型的指针转换为另一个类型的指针.这种转换不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可做到.reinterpret_cast 可以将指针值转换转载 2013-01-17 10:14:46 · 560 阅读 · 0 评论 -
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 · 570 阅读 · 0 评论 -
UML各种对象、关系表示方法
大话设计模式上面的UML类图: 类的UML表示动物 的矩形框 表示是一个类。类图分为三层,第一层显示类的名称,如果是抽象类,则用斜体表示;第二层是类的特性,通常就是类的字段和属性;第三层显示类的操作,通常就是方法或行为。前面的“+”表示是public,“-”表示是private,“#”表示是protected。接口的UML表示接口的UML表示与类图的区别主要是顶转载 2012-11-27 16:31:45 · 2046 阅读 · 0 评论 -
数组名a和&a的不同
有一段程序如下:#include void main(){ int a[2][3]; int**p=a;}请问为什么是错误的??(请不要说数组名是一个指针这个我知道,我想知道为什么不能用二级指针指向二维数组) 本来不想写什么的,但是看看,我觉得都没有我想要的答案,于是我像楼主推荐我的拙见。其实这个数组与指针的问题,要写的话,一句话,两句话是将转载 2012-02-23 11:28:09 · 1702 阅读 · 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 · 543 阅读 · 0 评论 -
几种常见设计模式区别与优缺点
按照GoF上面写的设计模式分为三大类:1. 创建型模式(1) 工厂模型: 大概可以分为3种。a) 简单工厂模式优点: 只有一个工厂类,结构简单 缺点: 不完全符合OCP开放封闭原则(扩展应开放,修改应封闭),要增加一个新的产品类,必须相应修改工厂类的方法。b) 工厂方法模式优点: 可扩展性好,不用修改原始工厂类,增加一个工厂子类即可。缺点: 相比简单工厂模式,增加了原创 2012-10-18 17:04:27 · 8455 阅读 · 0 评论