
cpp
文章平均质量分 80
zzxian
尘世中一个迷途小书童!
展开
-
复习4:const定义的常量
1. 声明一个const变量(本文称为常量)时必须进行初始化。 编译器若能够确定常量的值且程序中不会访问该常量的地址,则不会为其非配内存,而是直接把它的值代入常量表达式。 const int c1 = 1;const int c2 = 2;const int c3 = my_f(3);extern const int c4;const int *p = &c2 除了c1不需要分配内存外,其他的常量都需要分配内存。2. const数组中的元素都是const的,且要在声明时初始化,原原创 2011-02-26 00:49:00 · 717 阅读 · 0 评论 -
STL 排序
C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点。STL 排序算法同样需要保持高效。因此,对于不同的需求,STL提供的不同的函数,不同的函数,实现的算法又不尽相同。1.1 所有sort算法介绍所有的sort算法的参数都需要输入一个范围,[begin, end)。这里使用的迭代器(iterator)都需是随机迭代器(RadomAccessIterator转载 2011-02-27 00:07:00 · 599 阅读 · 0 评论 -
c++标准程序库之通用工具
4.1 struct pair pair将两个值视为一个单元,该结构体有两个成员,first和second,在map和multimap中用它管理键值对。函数返回两个值,也可使用pair。 pair除了提供了构造函数族(默认,拷贝,普通),还提供了静态的构造函数make_pair(cosnt T1&, cosnt T2&)。当然,pair提供了比较操作符,first和se原创 2012-02-02 23:13:23 · 705 阅读 · 0 评论 -
C++获取文件夹和文件信息
C++获取文件夹和文件信息—_findfirst,_findnext和_findclose方法Binhua Liu 介绍 本文的目的是介绍C++中如何通过_findfirst,和_findclose方法来查找文件夹中所有子文件夹和文件.本文还讨论了使用SHGetFileInfo函数和结构体来获取文件/文件夹的详细信息。 库和头文件 为了使用_findfirst,_f转载 2011-05-13 09:49:00 · 14949 阅读 · 2 评论 -
bitset 用法整理
构造函数bitset b; b有n位,每位都为0.参数n可以为一个表达式.如bitset b0;则"b0"为"00000"; bitset b(unsigned long u); b有n位,并用u赋值;如果u超过n位,则顶端被截除如:bitsetb0(5);则"b0"为"00101"; bitset b(string s); b是string对象s中含有的位转载 2012-03-17 00:26:47 · 531 阅读 · 0 评论 -
位操作之一
u=u&(u-1) :把u最右端一个1变成0。u=u&(u+1):把u最右端连续的多个1变成多个0。u=u|(u-1):把u最右端连续的多个0变成多个1.u=u|(u+1):把u最右端的一个0变成1.原创 2012-03-19 01:52:16 · 708 阅读 · 0 评论 -
ANSI C标准中几个标准预定义宏
ANSI C标准中有几个标准预定义宏:__FILE__ __DATE__ __TIME___ __LINE__ 等__LINE__:在源代码中插入当前源代码行号;__FILE__:在源文件中插入当前源文件名;__DATE__:在源文件中插入当前的编译日期__TIME__:在源文件中插入当前编译时间;__S转载 2012-03-26 21:19:27 · 1238 阅读 · 0 评论 -
c++ 里的const
1. const函数不能修改对象内容,调用的成员或类函数也必须是const,否则编译不过。2. const引用返回的东西也要是const, 如果你调用了一个函数让他返回非const的东西(你很奇怪,const对象可以暴漏非const的成员吗? 可以的,map 的operator[]就可以),编译不过。3. 对于map不要用operator [], 使用find和insert完成你要做的事,原创 2012-08-22 20:33:57 · 861 阅读 · 0 评论 -
全局变量、extern/static/const区别与联系
博主感言:网上总是有一些人的文章写的不错,今天再转载一篇总结得不错的,浅显易懂,红色加粗字体请大家多看几遍。在讨论全局变量之前我们先要明白几个基本的概念:1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这转载 2012-09-28 16:40:21 · 625 阅读 · 0 评论 -
c++强制类型转换
http://stackoverflow.com/questions/332030/when-should-static-cast-dynamic-cast-and-reinterpret-cast-be-used原创 2012-10-03 18:21:08 · 560 阅读 · 0 评论 -
c++ 指针和引用传递
别人的程序core了,segv_maperr。查了一下是内存释放的有问题。就如同下面的代码#include #include void FreeMsgBuffer( char* msg){ if (NULL != msg) { free(msg); msg = NULL; }}int main(void){ char *pszTmp; pszTmp = NU原创 2012-12-06 12:26:34 · 2031 阅读 · 2 评论 -
c++ overload override redefine
先来看几个概念:重载(overload),重写(override,也称覆盖), 重定义(redefine,也称隐藏)(PS:第三个我不确定在英文中是否应该称为redefine,如有问题,留言告知,谢谢)一、重载(overload)指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。(1)相同的范围(在同一个作用域中) ;(2)函数名字相同;(3转载 2012-12-04 12:42:20 · 1062 阅读 · 0 评论 -
C++中extern “C”含义深层探索
(转)C++中extern “C”含义深层探索 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人转载 2011-08-03 14:10:54 · 532 阅读 · 0 评论 -
GCC 参数详解
[介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs] 3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 4.连接目标代码,生成可执行程序[链接器ld] [参数详解] -x l转载 2013-11-20 21:57:29 · 2441 阅读 · 0 评论 -
二进制实用程序(objdump, readelf,ar, nm等)(收藏)
原文地址:二进制实用程序(objdump, readelf,ar, nm等)(收藏) 作者:wwmGNU 二进制实用程序Binutils (GNU binary utilities)包括:objdump、readelf、addr2line、strip、ar、nm、ldd、ngprof、gcov等。一。 objdump - 显示二进制文件信息objdump可以根据目标文件来生成可读性比较好的汇编文件原创 2013-11-20 22:22:42 · 2231 阅读 · 0 评论 -
C++调用DLL有两种方法——静态调用和动态调用
[C++]调用DLL有两种方法——静态调用和动态调用(一).静态调用其步骤如下:1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下;2.把你的youApp.lib拷到你目标工程(需调用youApp.DLL的工程)目录下;转载 2011-09-09 09:49:25 · 30936 阅读 · 1 评论 -
dll导出类和dll地狱
DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应用程序。作为一名面向对象的程序员,希望DLL可以导出类,以便在类的层次上实现复用。所幸的是,DLL确实也可以导出类。然而事实却没转载 2011-09-01 21:52:05 · 696 阅读 · 0 评论 -
14:异常处理
14.1 错误处理 异常是程序处理错误的有力工具。检查到一个在局部无法解决的问题时,函数应该抛出一个异常给调用者——而不是通过其他方法——由调用者决定如何处理。若整个程序内无法解决这个问题(没有对应的异常处理器)则终止程序。 如何处理错误应在在软件的整体设计阶段完成。这也意味着异常是一个全局概念,应该从全局的角度考虑异常类的层次设计。14.1.1 C++原创 2011-06-14 22:47:00 · 764 阅读 · 0 评论 -
复习6:void指针和结构体
<br />1.void指针的安全操作有:<br /> 1.把任何对象的指针值赋给空指针.<br /> 2.两个空指针相互赋值,并可比较相等.<br /> 3.可以显示地把空指针转换的另一类型.<br />除此之外其他所有操作都是不安全的.看下例:<br />void f(int* pi){ void* pv = pi; //ok *pv; //error,void* 不能间接引用 pv ++; //error,void不能增量(不知道被指对象的大小) int* p2 = s原创 2011-03-03 00:48:00 · 1833 阅读 · 0 评论 -
复习5:名字和引用
1.一个名字表示“内存中是什么东西”,这即是最简单最基本的“对象”的概念,对象就是“内存中一片连续的区域”,不要与类对象的高级概念相 混淆.2.引用就是对象的别名,在声明引用时必须对它初始化,此后它只能从一而终,不能再引用其他的对象了. 如果 int& r = i; 那么&r将返回i的地址. 引用的一种实现方式是把它作为一个常量指针,在每次使用它的时候都自动地做间接访问.在某些情况下,编译器可以通过优化去掉引用,使得在 执行时根本不存在任何表示引用的东西. 引原创 2011-03-03 00:31:00 · 553 阅读 · 0 评论 -
复习7:表达式与运算符
1.求值顺序. 在一个表达式里,子表达式的求值顺序是没有定义的.v[i] = i++;的结果是无定义的. 算符,(逗号),&&(与),||(或)保证了位于它们左边的运算对象一定会在右边的运算对象之前求值.例如,b=(a=2,a+1)将把3赋给b. 考虑f1(v[i],i++)与f2((v[i],i++)).前一个有两个参数,且参数的求值顺序是没有定义的.后一个有一个参数,即逗号表达式的值,它等价于i++.2.堆存储算符new和delete. new算符把对象在堆上分配.使用delete能销毁它们,且原创 2011-03-04 01:05:00 · 603 阅读 · 0 评论 -
复习8:函数
1.内联函数 内联函数提示编译器把函数调用在线化,递归内联函数能在线化调用的层次由编译器的“聪明度”决定。2.参数传递 2.1参数传递的求值顺序是未定义的。如f(i,i++)的参数值是未定义的,结果也是不可知的。 2.2参数传递一般为值传递,保证了实参的值不会修改,但存在效率问题。于是我们使用指针和引用做参数,但使用它们可能会修改实参。为了给调用者足够的保证,我们使用const修饰它们表示不会改变实参的值,不使用则说明我们需要修改实参值。这样的风格对程序设计是大有裨益的。 2.3指针、常量指原创 2011-03-05 11:22:00 · 601 阅读 · 0 评论 -
C函数调用过程分析
一.环境: x86/WinXP/VC 6.0二.用例:int swap(int a, int b){ int v; v = a; a = b; b = v; return v;}void main(void){ int a = 7; int b = 10; int c = 0; c = swap(a,b); return;}三.分析:1: int swap(int a, int b)2: {00401020 push ebp00401021 mov e转载 2011-03-05 11:32:00 · 772 阅读 · 0 评论 -
复习1:bool类型和char数组
1. bool类型bool类变量只能有0或1两种取值,使用true,false,0,1 初始化bool变量正常编译通过。使用数值类型量(如int,char,double,指针变量,字符串文字量)初始化bool变量编译器提出警告。运行时把非0数值类型量转化成1,把值为0的量转化成0.使用其他类型量(如一个结构体,某类的对象)初始化bool变量则编译器给出错误。例子:bool b; b=3; b=0.4; b='a'; b="avba"; b=""; b=&b; ---这几种情况b的值均为1bool b;原创 2011-02-22 00:58:00 · 4448 阅读 · 0 评论 -
typedef常见用法
<br /><br />1.常规变量类型定义<br />例如:typedef unsigned char uchar<br />描述:uchar等价于unsigned char类型定义<br /> uchar c声明等于unsigned char c声明<br />2.数组类型定义<br />例如: typedef int array[2];<br />描述: array等价于 int [2]定义;<br /> array a声明等价于int a[2]声明<br />扩展: typede转载 2011-03-12 00:55:00 · 21338 阅读 · 5 评论 -
复习9:源文件和程序
<br />写这篇文章之前要介绍命名空间和异常的。因为现在不常用它们,暂且略去。<br />9.1 分别编译<br /> 源文件提交给编译器后,首先进行预处理,即完成宏处理和按照#include指令引进头文件。预处理之后的源文件成为编译单位--编译器真正的工作对象。连接器将分别编译的部分约束在一起。<br /> <br />9.2 连接<br /> 如果一个名字可以在定义它的编译单位之外的其他编译单位使用,称其具有外部连接性。否则称其具有内部连接性。<br /> const原创 2011-03-15 02:15:00 · 755 阅读 · 0 评论 -
复习2:cin,cout进制设置
<br />一个程序就能代表:int main(){ int i,j,k; cout<<"Input i(oct),j(hex),k(dec)/n"; cin>>oct>>i; cin>>hex>>j>>dec>>k; cout<<"Output i(dec),j(oct),k(oct)/n"; cout<<dec<<i<<' '<<oct<<j<<' '<<k<<endl; system("pause");}原创 2011-02-23 23:30:00 · 751 阅读 · 0 评论 -
复习3:文字量
1. 整形的文字量默认成int,sizeof(100)=42. 小数的文字量默认成double,sizeof(5.2)=83. 字符的文字量默认成char, sizeof('a')=14.字符串的文字量默认成const char[],sizeof("abc")=4;原创 2011-02-24 00:01:00 · 547 阅读 · 0 评论 -
复习10:类
10.1 引言10.2 类10.2.1 成员函数10.2.2 访问控制10.2.3 构造函数 构造函数可以有多种重载形式,如:class Date{ int d,m,y;public: //.. Date(int,int ,int); Date(int,int); Date(int); Date(); Date(const char*);};Date today = Date(23,6,1983);Date xmas(23,6,1983); //简写原创 2011-03-18 12:38:00 · 588 阅读 · 0 评论 -
复习15:类的层次结构
15.1 引言和概述15.2 多重继承 使用多重继承可以用多个父类组合出子类。最常见的是继承多个抽象类,即实现多个接口。但使用多重继承也是有风险的,如可能存在歧义性。15.2.1 歧义性解析 两个父类中存在相同名字的成员,包括成员变量和成员函数,在子类中使用该名字就需要歧义性解析。有两种方法完成这项工作。 1. 子类重新定义了这个名字,遮蔽了父类信息,也遮蔽了歧义性。可以通过加上父类限制符的方式访问父类定义的名字。 2. 子类没有重新定义 这个名字,则需要通过父类原创 2011-04-22 01:46:00 · 849 阅读 · 0 评论 -
effective c++ 第一章:让自己习惯c++
条款1: 视c++为语言联邦高效的c++在不同场景下,有不同的编写范式或风格。没有必要为其规定统一格式,根据需要使用c++不同的特点去扮演不同的角色吧。条款2:尽量以const、enum和inline替代define使用define“定义”的常量对编译器不可见,不会进入符号表,不便以后排错,且会加大目标代码量。使用define定义的函数宏也十分不便。如何使用const定义和初始化不原创 2014-01-08 22:35:52 · 875 阅读 · 0 评论