随笔分类 -  C++

gcc/g++编译
摘要:1. gcc/g++在执行编译工作的时候,总共需要4步(1).预处理,生成.i的文件[预处理器cpp](2).将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs](3).有汇编变为目标代码(机器代码)生成.o的文件[汇编器as](4).连接目标代码,生成可执行程序[链接器ld][参数详解] -x language filename   设定文件所使用的语言,使后缀名无效,对以后的多个... 阅读全文
posted @ 2010-07-22 08:10 chao_yu 阅读(18833) 评论(3) 推荐(4) 编辑
Linux下用Valgrind 内存检查
摘要:调不尽的内存泄露,用不完的Valgrind(一个介绍程序调试的精彩讲解:http://www.ibm.com/developerworks/cn/linux/l-pow-debug/)Valgrind 介绍 Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析。你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言... 阅读全文
posted @ 2010-07-20 14:49 chao_yu 阅读(2305) 评论(0) 推荐(1) 编辑
C/C++中static关键字详解
摘要:静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为0,使用时可以改变其值。 静态变量或静态函数只有本文件内的代码才能访问它,它的名字在其它文件中不可见。用法1:函数内部声明的static变量,可作为对象间的一种通信机制 如果一局部变量被声明为static,那么将只有唯一的一个静态分配的对象,它被用于在该函数的所有调用中表示这个变量。这个对象将只在执行线程第一次到达它... 阅读全文
posted @ 2010-07-14 17:53 chao_yu 阅读(110410) 评论(10) 推荐(29) 编辑
C/C++中作用域详解
摘要:作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,作用域由变量所在的最近一对括号确定。(1) 全局变量:全局变量是在所有函数体的外部定义的,程序的所在部分(甚至其它文件中的代码)都可以使用。全局变量不受作用域的影响(也就是说,全局变量的生命期一直到程序的结束)。如果在... 阅读全文
posted @ 2010-07-14 17:42 chao_yu 阅读(22849) 评论(0) 推荐(4) 编辑
C/C++中extern关键字详解
摘要:1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,... 阅读全文
posted @ 2010-07-14 17:41 chao_yu 阅读(517318) 评论(22) 推荐(102) 编辑
C/C++中volatile关键字详解
摘要:1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler that an object ... 阅读全文
posted @ 2010-07-14 17:41 chao_yu 阅读(93092) 评论(16) 推荐(48) 编辑
C/C++中const关键字详解
摘要:为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下: 常变量: const 类型说明符 变量名 常引用: const 类型说明符 &引用名 常对象: 类名 const对象名 常成员函数: 类名::fun(形参) const 常数组... 阅读全文
posted @ 2010-07-14 17:29 chao_yu 阅读(48963) 评论(17) 推荐(38) 编辑
STL,ATL,WTL之间的联系和区别
摘要:一、STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的代码从广义上讲分为三类:algorithm(算法)、conta... 阅读全文
posted @ 2010-07-14 11:59 chao_yu 阅读(7374) 评论(0) 推荐(0) 编辑
C/C++ 常见编程技巧
摘要:一、const char* 和char* 之间的转换 const char*是指向常量的指针,而不是指针本身为常量,可以不被初始化.该指针可以指向常量也可以指向变量,只是从该指针的角度而言,它所指向的是常量,通过该指针不能修改它所指向的数据.1.const char*是不能直接赋值到char*的,这样编译都不能通过,理由:假如可以的话,那么通过char*就可以修改const char指向的内容了,... 阅读全文
posted @ 2010-07-13 16:58 chao_yu 阅读(4735) 评论(0) 推荐(2) 编辑
C++虚函数表解析
摘要:C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 虚函数表 对C+... 阅读全文
posted @ 2010-07-12 11:19 chao_yu 阅读(1105) 评论(2) 推荐(0) 编辑
C++中代理类和句柄类
摘要:指针是 C 与其他语言区别的重要特征之一,在 C++ 中,指针也被广泛运用,我们通过指针实现多态。然而,众所周知,指针的使用必须小心,否则很容易造成内存泄漏 Memory Leak。当我们有几个指针指向同一个对象时有其应该注意,关于何时释放这个对象:(1) 如果释放的太早,那么其它的指针仍然指向这片内存,如果再使用它会造成未定义行为。(2) 如果一直不释放可能会丢失最后一个指向这个对象的指针 导致... 阅读全文
posted @ 2010-07-12 11:08 chao_yu 阅读(4974) 评论(0) 推荐(1) 编辑
C++的 RTTI 观念和用途
摘要:自从1993年Bjarne Stroustrup 〔注1 〕提出有关C++ 的RTTI功能之建议﹐以及C++的异常处理(exception handling)需要RTTI;最近新推出的C++ 或多或少已提供RTTI。 然而,若不小心使用RTTI,可能会导致软件弹性的降低。本文将介绍RTTI的观念和近况﹐并说明如何善用它。什么是RTTI﹖ 在C++ 环境中﹐头文件(header file) 含有类之... 阅读全文
posted @ 2010-07-07 18:10 chao_yu 阅读(2367) 评论(1) 推荐(1) 编辑
野指针
摘要:讨论一什么是野指针?  一个母亲有两个小孩(两个指针),一个在厨房,一个在卧室,(属于不同的代码块,其生存期不同)母亲让在厨房的小孩带一块蛋糕(指针指向的对象)给在卧室的小孩,这样在卧室的孩子才肯写作业。但这个在厨房的小孩比较淘气,他在走出厨房时自己将蛋糕吃了,没能带出来。而在卧室的没有吃到蛋糕,所以不肯完成他的作业。结果母亲却不知道卧室的孩子没有吃到蛋糕,还以为作业完了。结果第二天她就被老师召唤... 阅读全文
posted @ 2010-06-28 16:41 chao_yu 阅读(17552) 评论(4) 推荐(9) 编辑
C++迭代器 iterator
摘要:1. 迭代器(iterator)是一中检查容器内元素并遍历元素的数据类型。(1) 每种容器类型都定义了自己的迭代器类型,如vector:vector<int>::iterator iter;这条语句定义了一个名为iter的变量,它的数据类型是由vector<int>定义的iterator类型。(2) 使用迭代器读取vector中的每一个元素:vector<int>... 阅读全文
posted @ 2010-06-25 10:16 chao_yu 阅读(157598) 评论(3) 推荐(17) 编辑
深层揭密extern "C"
摘要:1. 深层揭密extern "C" extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。让我们来详细解读这两重含义。(1)被extern "C"限定的函数或变量是extern 类型的; extern 是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字... 阅读全文
posted @ 2010-06-22 15:48 chao_yu 阅读(853) 评论(0) 推荐(0) 编辑
实现linux的互斥量c++封装
摘要:先贴示范代码://--------------------tmutex.h开始------------------------------//实现linux的互斥量c++封装#ifndef TMUTEX_H#define TMUTEX_H#include <pthread.h>//线程互斥量struct ThreadMutex{ ThreadMutex() { pthread_mute... 阅读全文
posted @ 2010-06-21 10:26 chao_yu 阅读(3346) 评论(0) 推荐(0) 编辑
C++的 explicit关键字
摘要:c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class MyClass{public:MyClass( int num );}....MyClass obj = ... 阅读全文
posted @ 2010-06-18 17:46 chao_yu 阅读(462) 评论(0) 推荐(0) 编辑
c++友元函数和友元类
摘要:采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和... 阅读全文
posted @ 2010-06-18 17:40 chao_yu 阅读(1085) 评论(0) 推荐(0) 编辑
"Pure Virtual Function Called": An Explanation翻译
摘要:本文引入作者Paul S. R. Chisholm关于Pure Virtual Function Called问题的深入见解,要说明的是翻译部分对原文进行了删减,很遗憾的去除了作者一些幽默风格的解说,直截了当地说明问题。面向对象 C++: 程序员的观点 在C++中,虚函数允许关联类实例在运行时拥有不同的行为(也称作运行时多态):class Shape {public:virtual double... 阅读全文
posted @ 2010-06-18 14:36 chao_yu 阅读(1158) 评论(0) 推荐(0) 编辑
C++的类型转换:static_cast、dynamic_cast、reinterpret_cast和const_cast
摘要:在C++中,存在类型转换,通常意味着存在缺陷(并非绝对)。所以,对于类型转换,有如下几个原则:(1)尽量避免类型转换,包括隐式的类型转换(2)如果需要类型转换,尽量使用显式的类型转换,在编译期间转换(3)避免使用reinterpret_cast和老式的强制类型转换操作符通常,隐式的类型转换会导致警告,需要重视这些警告,并使用显式的类型转换代替,例如static_cast代替一些算术类型转换。在C+... 阅读全文
posted @ 2010-06-18 11:47 chao_yu 阅读(2422) 评论(0) 推荐(0) 编辑