文章分类 -  C/C++编程

摘要:有下面的一个简单的类: classCNullPointCall{public:staticvoidTest1();voidTest2();voidTest3(intiTest);voidTest4();private:staticintm_iStatic;intm_iTest;};intCNullPointCall::m_iStatic=0;voidCNullPointCall::Test1(){cout<<m_iStatic<<endl;}voidCNullPointCall::Test2(){cout<<"VeryCool!"< 阅读全文
posted @ 2012-05-14 13:24 Mr.Rico 阅读(5552) 评论(0) 推荐(0) 编辑
摘要:一个map就是一个(关键码(key),值(value))对偶的序列,它提供基于关键码的快速提取操作。也就是说,可以用下标运算符[]将关键码 作为下标去执行查找,并返回对应的值。因此可以把map的使用方法想象成有特殊下标的数组。在很多时候用下标运算符[]来对map中的元素进行存取是非常 方便和简单的;但是,如果map下标运算符[]运用不得当,也会造成意想不到的问题。 我们知道,C++是不检查下标越界的。用超出数组下标范围的下标去访问数组元素的错误会在运行期出现,很有可能将程序搞崩溃。对于map而言,也没有类似 的下标越界概念,但是却有作为下标的关键码(key)在map中不存在的现象。在这种情况. 阅读全文
posted @ 2012-05-14 12:55 Mr.Rico 阅读(455) 评论(0) 推荐(0) 编辑
摘要:字符,字节和编码 [原创文章,转载请保留或注明出处:http://www.regexlab.com/zh/encoding.htm] 级别:中级 摘要:本文介绍了字符与编码的发展过程,相关概念的正确理解。举例说明了一些实际应用中,编码的实现方法。然后,本文讲述了通常对字符与编码的几种误解,由于这些误解而导致乱码产生的原因,以及消除乱码的办法。本文的内容涵盖了“中文问题”,“乱码问题”。 掌握编码问题的关键是正确地理解相关概念,编码所涉及的技术其实是很简单的。因此,阅... 阅读全文
posted @ 2012-05-13 17:34 Mr.Rico 阅读(245) 评论(0) 推荐(0) 编辑
摘要:转自:http://www.cppblog.com/franksunny/archive/2007/08/03/29269.html 主 要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代 码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这 类函数是不能运行在多任务环境下的。 也 可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括sta 阅读全文
posted @ 2012-05-12 18:20 Mr.Rico 阅读(163) 评论(0) 推荐(0) 编辑
摘要:我一直回避程序的内存管理,因为爱之愈深,恨之愈烈。但是,还是由很多的朋友一直在体这方面的问题,所以就索性把它坦白了,也许对你我都是一件好事情。 首先,需要搞清楚:变量的类型和它的存储类别是两个概念。 数据类型和内存管理没有直接的关系。 一、由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方... 阅读全文
posted @ 2012-05-08 15:24 Mr.Rico 阅读(269) 评论(1) 推荐(0) 编辑
摘要:摘要: 本文简述了随机数的产生原理,并用C语言实现了迭代取中法,乘同余法等随机数产生方法,同时,还给出了在符合某种概率分布的随机变量的产生方法。 关键词: 伪随机数产生,概率分布 1前言: 在用计算机编制程序时,经常需要用到随机数,尤其在仿真等领域,更对随机数的产生提出了较高的要求,仅仅使用C语言类库中的随机函数已难以胜任相应的工作。本文简单的介绍随机数产生的原理及符合某种分布下的随机变量的产生,并用C语言加以了实现。当然,在这里用计算机基于数学原理生成的随机数都是伪随机数。 注:这里生成的随机数所处的分布为0-1区间上的均匀分布。我们需要的随机数序列应具有非退化性,周期长,相关系数... 阅读全文
posted @ 2012-05-07 15:40 Mr.Rico 阅读(15835) 评论(0) 推荐(2) 编辑
摘要:字符串字面量(string literal)是一段双引号括起来的多字节字符序列,C/C++将其实现为具有静态存储连续性的字符数组。初学者(包括不少书籍)常将其称为字符串常量,但这说法只在C++成立,C中不成立。C中的常量只包括下列四种: 6.4.4 Constants Syntax constant: integer-constant floating-constant enumeration-constant character-constant 分别是整数常量、浮点常量、枚举常量和字符常量,并不包括字符串字面量。但由于字符串字面量具有静态存储连续性数组类型,并且在表达式中它会根据数组到.. 阅读全文
posted @ 2012-05-01 20:32 Mr.Rico 阅读(987) 评论(0) 推荐(0) 编辑
摘要:const修饰普通变量和指针 const修饰变量,一般有两种写法: const TYPE value; TYPE const value; 这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value值不可变。 例如: const int nValue; //nValue是const int const nValue; //nValue是const 但是对于指针类型的TYPE,不同的写法会有不同情况: (1) 指针本身是常量不可变 (char*) const pConte... 阅读全文
posted @ 2012-03-27 14:40 Mr.Rico 阅读(30453) 评论(3) 推荐(18) 编辑
摘要:C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。 Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示: No. 作用 说明 参考代码 1 可以定义const常量 const int Max = 100; 2 便于进行类型检查 const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,... 阅读全文
posted @ 2012-03-27 14:30 Mr.Rico 阅读(7670) 评论(0) 推荐(2) 编辑
摘要:在C/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位 整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有 printf(“%lld”,a),printf(“%I64d”,a),和cout << a三种方式。 本文讨论的是五种常用的C/C++编译器对64位整型的支持,这五种编译器分别是gcc(mingw32),g++(mingw32),gcc(linux i386),g++(linux i386),Microsoft Visual C++ 6.0 阅读全文
posted @ 2012-03-12 15:26 Mr.Rico 阅读(5840) 评论(0) 推荐(0) 编辑
摘要:1、http://codepad.org/推荐星级:★★★★是否需注册:否(注册的话也很快,几秒钟而已) 优点:网页界面简洁,一目了然,适合手机浏览器。且支持C,C++,D,PHP,PYTHON,Perl,Ruby等十几种编程语言,非常强大。查看执行结果时,高亮显示代码。缺点:有时点击提交按钮后,给出一个出错页面,需多次提交才给出结果。另外不具有交互性,且不提供编译后的可执行文件。 2、http://www.comeaucomputing.com/tryitout/ 推荐星级:★★ 是否注册:貌似不需要(网页上显示,注册后功能更多) 优点:编译器的版本多 缺点:页面文字较多,不适合手机浏览,. 阅读全文
posted @ 2012-03-05 16:46 Mr.Rico 阅读(338) 评论(0) 推荐(0) 编辑
摘要:本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。 从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源码文件)内的编译行为,只要超出了这个范围inline属性就没有任何作用了。所以inline关键字不应该出现在函数声明 中,没有任何作用不说,有时还可能造成编译错误(在包含了sys/compiler.... 阅读全文
posted @ 2012-02-27 23:44 Mr.Rico 阅读(24453) 评论(0) 推荐(0) 编辑
摘要:C++中的inline是个容易被误解的关键字,即使是专家也常会犯错。不信?请打开《Thinking in C++ 2rd Edition Volumn 1》,找到Chapter 9 "Inline Function"的Exercise 6:“Prove that inline functions default to internal linkage."为什么我说这里作者犯错了呢?因为C++ 03标准中角标79处明确写到:“ The inline keyword has no effect on the linkage of a function.“ 看,标准明确 阅读全文
posted @ 2012-02-27 23:33 Mr.Rico 阅读(689) 评论(0) 推荐(0) 编辑
摘要:一、模板特化(specialization of template)模板特化(specialization of template)并不是说实例化一个模板,如template <class T>,class stack<T>;声明stack<int>,这是实例化一个模板类。类模板特化的意思是,对于某个特定的类型,需要对模板进行特殊化,即特殊的处理。例如,stack类模板针对bool类型有特化,因为实际上bool类型只需要一个二进制位,就可以对其进行存储,使用一个字或者一个字节都是浪费存储空间的.同样,函数模板特化也是针对某个特定类型的特殊处理,一个比较经典的 阅读全文
posted @ 2012-02-27 22:01 Mr.Rico 阅读(244) 评论(0) 推荐(0) 编辑
摘要:如何判断栈的增长方向?对于一个用惯了i386系列机器的人来说,这似乎是一个无聊的问题,因为栈就是从高地址向低地址增长。不过,显然这不是这个问题的目的,既然把这个问题拿出来,问的就不只是i386系列的机器,跨硬件平台是这个问题的首先要考虑到的因素。在一个物质极大丰富的年代,除非无路可退,否则我们坚决不会使用汇编去解决问题,而对于这种有系统编程味道的问题,C是一个不错的选择。那接下来的问题就是如何用C去解决这个问题。C在哪里会用到栈呢?稍微了解一点C的人都会立刻给出答案,没错,函数。我们知道,局部变量都存在于栈之中。似乎这个问题立刻就得到了解答,用一个函数声明两个局部变量,然后比较两个变量的地址, 阅读全文
posted @ 2012-02-27 10:56 Mr.Rico 阅读(3684) 评论(0) 推荐(2) 编辑
摘要:1. const变量声明中带有关键词const,意味着不能通过赋值,增量或减量来修改该变量的值,这是显而易见的一点。指针使用const则要稍微复杂点,因为不得不把让指针本身成为const和指针指向的值成为const区别开来、下面的声明表示pf指向的值必须是不变的constfloat *pf;而pf则是可变的,它可以指向另外一个const或非const值;相反,下面的声明说明pf是不能改变的,而pf所指向的值则是可以改变的:float* const pf;最后,当然可以有既不能改变指针的值也不能改变指针指向的值的值的声明方式:constfloat * const pf;需要注意的是,还有第三种放 阅读全文
posted @ 2012-02-27 10:23 Mr.Rico 阅读(1475) 评论(0) 推荐(0) 编辑
摘要:按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序 代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求. 栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完 全未知的,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所... 阅读全文
posted @ 2012-02-26 15:53 Mr.Rico 阅读(353) 评论(0) 推荐(0) 编辑
摘要:多态性----vptr----vtable 多态性 (polymorphism) 是面向对象编程的基本特征之一。而在 C++ 中,多态性通过虚函数 (virtual function) 来实现。我们来看一段简单的代码: #include<iostream>usingnamespacestd;classBase{inta;public:virtualvoidfun1(){cout<<"Base::fun1()"<<endl;}virtualvoidfun2(){cout<<"Base::fun2()"< 阅读全文
posted @ 2012-02-16 11:18 Mr.Rico 阅读(413) 评论(0) 推荐(0) 编辑
摘要:math.h常用函数 int abs (int x); double acos (double x); double asin (double x); double atan (double x); double atan2 (double y, double x); double atof (const char *s); double ceil (double x); double cos (double x); double cosh (double x); double exp (double x); double fabs (double x); double floor (dou. 阅读全文
posted @ 2012-02-02 22:16 Mr.Rico 阅读(3103) 评论(0) 推荐(0) 编辑
摘要:C++语言风格流变史 文章来源:计算机世界网 作者:王咏刚 程序代码也有风格,这算不得什么新鲜事。早在20世纪80年代, C语言程序员就必须在K&R风格和ANSI风格之间择善而从。但平心而论,我确实没有见过哪一种语言能像C++这样,在代码风格方面表现得如此诡 谲和难以捉摸:谁也说不清C++代码究竟能衍生出多少种迥异的风格,但我知道,有许多C++初学者在面对不同风格的C++代码时,经常会误以为自己看到的 是好几种完全不同的编程语言——仅此一点就足以提醒我们,研究和廓清C++语言风格的演化和发展规律已是当务之急了。 和文体学家们研究历朝历代文体变迁的工作相仿,研究C++语言风格的流变史也没 阅读全文
posted @ 2011-04-17 15:41 Mr.Rico 阅读(368) 评论(0) 推荐(0) 编辑