C++
文章平均质量分 77
whm2300
这个作者很懒,什么都没留下…
展开
-
裘宗燕:C/C++ 语言中的表达式求值
经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout C++ 不是规定 要弄清这些,需要理解的一个问题是:如果程序里某处修改了一个变量(通过赋值、增量/减量操作等),什么时候从该变量能够取到新值?转载 2013-03-08 20:36:42 · 505 阅读 · 0 评论 -
优秀程序员不得不知道的20个位运算技巧
一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读《编程之美》求“1的数目”时,我才开始觉得位运算是如此之美,后来读到 《Hacker's Delight》,感慨到Henry S.Warren把位运算运用的如此神出鬼没,很多程序都十分精妙,我觉得在一转载 2013-12-24 23:59:15 · 500 阅读 · 0 评论 -
C语言位运算详解
位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1转载 2013-12-24 23:58:18 · 478 阅读 · 0 评论 -
虚拟内存、逻辑地址、线性地址、物理地址
逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel 保护模式下程序执行代码段限长内转载 2013-12-23 22:32:17 · 476 阅读 · 0 评论 -
typeid 与 typeinfo 与typename
一,type_info typeid(对象指针) :返回对象的typeinfo类型,类似于c#中的typeof()方法,返回type类型一样。二,type_info类type_info(类型信息):存储特定类型的有关信息,定义在头文件中。type_info类的具体内容由编译器实现来决定,但是至少必须包含返回字符串的name()成员函数。下面是type_info类的V转载 2013-12-24 12:19:37 · 1169 阅读 · 0 评论 -
C++ 关于声明,定义,类的定义,头文件作用,防止头文件在同一个编译单元重复引用,不具名空间
1. 编译单元,一个.cc,或.cpp作为一个编译单元.生成.o2. 普通数据类型的定义,声明,函数的定义声明(类函数是一样的)extern int x; //变量是声明,并未实际分配地址,未产生实际目标代码 void print(); // 函数声明, 未产生实际目标代码 如int x; int x = 3 ; void print() {};转载 2014-01-02 00:17:22 · 620 阅读 · 0 评论 -
成员函数指针与高性能的C++委托
成员函数指针与高性能的C++委托Member Function Pointers and the Fastest Possible C++ Delegates 撰文:Don Clugston翻译:周翔 引子标准C++中没有真正的面向对象的函数指针。这一点对C++来说是不幸的,因为面向对象的指针(也叫做“闭包(closure)”或“委托(delegate)”)在一些语言中转载 2013-12-13 14:22:57 · 635 阅读 · 0 评论 -
C++类占内存大小
总结:空类占用1个字节,非空类的大小=非静态成员变量占用大小(静态变量不占内存)+虚函数占用内存(4字节,不管有多少个虚函数)+字节对齐的开销(成员函数不算入类的空间),子类大小=本身成员变量大小+父类大小来看一个总的例子:[cpp] view plaincopy#include class Car { publi转载 2013-08-09 20:50:19 · 729 阅读 · 0 评论 -
c++ 局部变量 全局变量 atexit注册函数 析构顺序
析构先后顺序为:局部变量、mian函数中注册atexit函数、全局变量及在其中注册atexit函数(全局变量和在全局变量中注册atexit函数析构顺序与构造顺序相反)。测试代码如下(gcc-4.6.3编译, ubuntu 12.04 linux 内核3.2.0运行):#include #include #include #include static void PrintCurTim原创 2013-08-06 23:01:03 · 1643 阅读 · 0 评论 -
字符串赋值给字符指针(char *a="hello")的正确理解方式
Technorati 标签: 字符串,数组,地址,char *;对于语句 char *a="hello"; 对于这个声明方式,会造成的误解是:声明了一个字符指针(它会指向一个位置),将“字符串”赋值给 指针表达式"*a"所指向的地址。但正解是:声明了一个字符指针后,并用字符串常量的第一个字符的地址赋值给指针变量a。 即正确顺序是:1.分配内转载 2013-07-17 21:22:39 · 1026 阅读 · 0 评论 -
各种字符串Hash函数比较
常用的字符串Hash函数还有ELFHash,APHash等等,都是十分简单有效的方法。这些函数使用位运算使得每一个字符都对最后的函数值产生影响。另外还有以MD5和SHA1为代表的杂凑函数,这些函数几乎不可能找到碰撞。常用字符串哈希函数有BKDRHash,APHash,DJBHash,JSHash,RSHash,SDBMHash,PJWHash,ELFHash等等。对于以上几种哈希函数,我对其进转载 2013-05-12 17:15:20 · 519 阅读 · 0 评论 -
C++中的动态绑定
动态绑定(dynamic binding):动态绑定是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。 C++中,通过基类的引用或指针调用虚函数时,发生动态绑定。引用(或指针)既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键。用引用(或指针)调用的虚函数在运行时确定,被调用的函数是引用(或指针)所指对象的实际类型所定义转载 2013-05-12 17:13:23 · 715 阅读 · 0 评论 -
c++ 私有继承
class person ; class student: private person ; // inheritance is now private void eat(const person& p); // anyone can eat void study(const student& s); // only students study person p;转载 2013-12-25 15:44:00 · 520 阅读 · 0 评论