![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 52
淡蓝
计算机专业毕业,热爱编程,熟悉网络编程、linux,对linux内核、驱动、游戏、图像也有一定研究。
展开
-
c++四种强制转换
<br />C++ 同时提供了四种新的强制转型形式(通常称为新风格的或 C++ 风格的强制转型): <br /> const_cast(expression) <br /> dynamic_cast(expression) <br /> reinterpret_cast(expression) <br /> static_cast(expression)<br /><br /> 每一种适用于特定的目的: <br /> ·const_cast 一般用于强制消除对象的常量性。它是唯一能做原创 2010-12-06 11:21:00 · 401 阅读 · 0 评论 -
VS2008中虚继承内存布局分析
<br />先定义四个类,它们的继承关系为:class Base;class A:virtual public Base;class B:virtual public Base;class C:public A,public B 用这四个类进行分析class Base{public:Base():base('a'){cout<<"Base:"<<(int)this<<endl;}void get(){cout<<"base"<<endl;}int base;};class A :virtual public原创 2011-04-17 11:28:00 · 561 阅读 · 0 评论 -
C++获取类成员函数的指针
<br />C++ class中有三种成员函数,static,nonstatic,virtual各种成员函数的指针各有区别,以下是一个完整的例子:class A {public:static void staticmember(){cout<<"static"<<endl;} //static membervoid nonstatic(){cout<<"nonstatic"<<endl;} //nonstatic membervirtual void virtualmember(){c原创 2011-04-17 11:28:00 · 4018 阅读 · 0 评论 -
纯虚函数的几点说明
<br />C++纯虚函数可以有定义,并且能够调用<br />class A<br />{<br /> public:<br /> virtual ~A()=0;<br />};<br />对于这样一个纯虚类,它是不可以被继承的,因为编译器总是会为派生类安插一个基类的析构函数的调用。<br />解决方法有二个:<br />1)将析构函数改成非纯虚<br />2)为纯虚析构函数加上定义<br />A::~A(){}<br /> <br />纯虚函数如果有定义体,则它可以在其派生类中被调用<br />cl原创 2011-04-17 11:07:00 · 355 阅读 · 0 评论 -
虚继承与虚基类的本质
<br /> 虚继承和虚基类的定义是非常的简单的,同时也是非常容易判断一个继承是否是虚继承<br />的,虽然这两个概念的定义是非常的简单明确的,但是在C++语言中虚继承作为一个比较生<br />僻的但是又是绝对必要的组成部份而存在着,并且其行为和模型均表现出和一般的继承体系<br />之间的巨大的差异(包括访问性能上的差异),现在我们就来彻底的从语言、模型、性能和<br />应用等多个方面对虚继承和虚基类进行研究。<br /> 首先还是先给出虚继承和虚基类的定义。<br /> 虚继承原创 2011-04-17 11:14:00 · 335 阅读 · 0 评论 -
含位域结构体的sizeof
<br />使用位域的主要目的是压缩存储,其大致规则为:<br />1) 如果相邻位域字段的类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止;<br />2) 如果相邻位域字段的类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小的整数倍;<br />3) 如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩方式,Dev-C++采取压缩方式;<br />4) 如果位域字段之间穿插着非转载 2011-04-17 11:18:00 · 457 阅读 · 0 评论 -
stl智能指针auto_ptr
<br /> 感觉auto_ptr还是存在一些不足的,效率十分低,而且丢失了一般指针方便常用的操作,如++,--等,auto_ptr只重载了=,*,->这几个操作符,所以使用很不方便。<br /> 一、说明:int *a = NULL;delete a;//do nothing 应此auto_ptr的析构函数是这样子的: ~auto_ptr() { // destroy the objectdelete _Myptr; } 二、auto_ptr中有一个很重要的函数rel原创 2011-04-17 11:22:00 · 701 阅读 · 0 评论 -
诡异的编译器行为
先看几个例子:例1:class A{public: inline void get(){cout};A a;a.get(); //这里,内联函数会展开吗。//答案是不会,因它里边包含了函数调用,编译器会把内联忽略掉例2:class A{public: A(A& a){this->x = 555;} A& operator=(int b) { this->x = 444; return *this; } int x;}A a;a = 2;cout是否正确原创 2011-04-17 15:54:00 · 715 阅读 · 0 评论 -
VS2008下QT的使用
<br />个人觉得QT是一个很好的框架,但是我却不想去学他里边很深的东西,只想用QT的界面库,因为MFC实在是太垃圾了,已经受够了。<br />用QT Designer可以进行快速的界面开发,QT文档丰富,易学易用。现在QT已经可以很好地支持VS了。<br />下面介绍如何用VS2008使用QT库。<br />1、上QT官网下载qt-win-opensource-4.7.1-vs2008.exe<br />2、下载 qt-vs-addin-1.1.3.exe<br />3、安装上面那两个软件。<br />原创 2011-04-27 23:32:00 · 3862 阅读 · 0 评论 -
我的编程规范
1、类型命名(class,struct,enum ,define)每个单词以大写开头,不含下划线class:以C开头例:class CUrlTable;接口:以I开头struct:以tag开头 或 全部用大写字母表示(单词单用_隔开)enum ,define:全部用大写字母表示(单词用_隔开)例:enum TYPE{ TYPE _FIRST, TYPE _SECOND};#define MAX_PATH2、变量命名前缀 + 类型 + 变量名[m_|s_|g_] type [class name|原创 2011-05-02 21:52:00 · 952 阅读 · 0 评论 -
最好的C++书籍介绍(转)
<br /><br />参考书籍 - 所有水平<br />1. The C++Programming Language (Bjarne Stroustrup) ,由C++创建者编写的经典介绍入门书籍。这本书涵盖了C++核心的方方面面,而且还有标准库,也提到了编程的风格和语言的哲学。<br />2. C++ StandardLibrary Tutorial and Reference(Nicolai Josuttis) C++标准转载 2011-05-03 13:47:00 · 7940 阅读 · 0 评论 -
vs2008背景色设置的问题
VS2008设置背景色后,会出标识符背景色为白色的情况,很刺眼。 解决方案:在显示项中找到标识符项,将其背景色设为与原背景色相同即可原创 2011-07-17 18:07:10 · 3297 阅读 · 4 评论 -
LINUX下GCC链接库函数导出声明
在linux下,源文件中的所有函数都有一个默认的visibility属性为public在编译命令中加入-fvisibility=hidden参数,会将所有默认的public的属性变为hidden。此时,如果对函数设置__attribute__ ((visibility("defa原创 2011-07-28 11:56:17 · 2141 阅读 · 0 评论 -
可重载运算符和不可重载运算符
<br /><br /> <br />可重载运算符表:<br />Opp<br />Name<br />Type<br /> Opp<br />Name<br />Type<br />,<br />Comma<br />Binary<br />–>*<br />Pointer-to-member selection<br />Binary<br />!<br />Logical NOT<br />Unary<br />/<br />Division<br />Binary<br />!=<br />Ine原创 2011-04-17 11:27:00 · 582 阅读 · 0 评论 -
类的静态常量成员
<br />类中允许存在静态常量成员class Single{const static char c= 2; //类型可以为int,long,char等,但不能为float,double,char*等};static成员:在外部初始化const成员:在初始化列表中初始化原创 2011-04-17 11:24:00 · 915 阅读 · 0 评论 -
sizeof 大解密
<br />c语言中判断数据类型长度符用法 sizeof(类型说明符,数组名或表达式);或 sizeof 变量名<br />1. 定义:sizeof是C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数。MSDN上的解释为:The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including ag转载 2011-04-17 11:16:00 · 343 阅读 · 0 评论 -
C++类的初始化列表
<br />类的初始化列表是在调用构造函数以前,为整个类开辟空间时就执行的。<br /><br />类中定义const(常量)和&(引用)成员时,应在初始化列表中初始化。<br /><br />应将已知的初始化放到初始化列表中,而不是构造函数中,因为如果放到构造函数中,就相当于初始化了两次。原创 2010-12-06 11:28:00 · 386 阅读 · 0 评论 -
C++的内存结构
今天看了一下《C++应用程序性能优化》一书,看完了第一章,感觉挺不错的,有点相见恨晚的感觉。刚开始学C++的时候,我几乎不对内存进行直接操作,连指针都尽量避开。因为这些东西确实挺复杂的。学了汇编以及一些硬件的知识之后,感觉自己在这个层次上有一点提升了,就想着去了解一下C++更深层次的一些东西。 首先困扰我的就是类和结构体的内存分配问题,经过了那么久的学习,总算感觉有些懂了,在这里做点笔记。 分析一下下面段C++代码:#include "stdio.h"int g_global;class A{publi原创 2010-12-06 11:18:00 · 501 阅读 · 0 评论 -
《程序员面试宝典(二)》笔记
眨眼大三就过了一半了,来年就要准备上战场了,感觉颇有压力。近日开始重新翻读C++,不看不知道,看了吓一跳,发现在自己不懂的还很多。于是下定决心,静心研读,打好基础,每日多待图书馆。 近日看到了一本名叫《程序员面试宝典》的书,感觉里边讲的很多东西都很中肯,正好能打中我的缺点,于是每日去读一点,并把感觉比较重要的记在这里,方便以后阅读。 一、static static可以限制作用域,即只能够在本文件中使用。 二、类/结构体的大小 空类的大小为1,不含虚函数的类的大小等于其去除所有方原创 2010-12-06 11:30:00 · 332 阅读 · 0 评论 -
C++虚函数表解析(转) ——写的真不错
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。转载 2010-12-06 12:23:00 · 421 阅读 · 0 评论 -
C++开源库
<br />C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年。因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应用。当Java横行天下之后,MS又突然发力,搞出C#语言,有大片的曾经的C++程序员,以为C++要就此沉沦,未料,这三年来,C++的生命力突然被严重地增强了。主力原因就是开源的软件、基础软件(比如并发原生支持,比如Android必定要推出原生的SDK)、各种跨平台应用的出现。<br /> <br />开源C++库必须具有以下特点:必须是成熟的产品、跨平台转载 2011-05-23 13:53:00 · 830 阅读 · 0 评论 -
浅析C++ 大三律
<br /><br />C++中几乎所有的类都有拷贝构造函数,析构函数和赋值操作符重载函数,即使你不显示定义,编译器也会自动生成的,它们提供的都是一些最基本的功能。<br />拷贝构造函数:一种特殊的构造函数,他由编译器调用来完成一些基于同一类的其他对象的构件及初始化;<br />析构函数:摧毁一个对象并保证它被彻底清除;<br />赋值操作符:以已有对象为蓝本给另一对象进行新的赋值。<br />所谓的大三律(rule of three, the law of the big three or the bi原创 2011-04-17 11:16:00 · 832 阅读 · 1 评论 -
再谈内存分配与对齐
<br />先看几段代码1、堆中开辟内存<br />char *x = new char[5];char *y = new char[8];cout<<(int)(x-y)<<endl;结果:-162、全局区内存char x;int y;char z;void main(int argc,int **argv){cout<<(int)&x<<endl<<(int)&y<<endl<<(int)&z<<endl;}结果:4207549420755242075483、栈中内存void main(int ar原创 2011-04-17 11:22:00 · 465 阅读 · 0 评论 -
C++操作符的优先级
<br /> <br /><br />C++操作符的优先级<br />操作符及其结合性<br />功能<br />用法L<br />L<br />L::<br />::<br />::全局作用域 <br />类作用域 <br />名字空间作用域::name<br />class::name<br />namespace::nameL<br />L<br />L<br />L<br />L<br />.<br />-><br />[]<br />()<br />()<br />成员选择 <br />成员选择转载 2011-04-17 11:25:00 · 465 阅读 · 0 评论 -
boost::regex学习
<br /><br />一:编译<br />boost的正则表达式需要编译(如果不需要全部Boost的功能的话,请不要build all boost,那会花掉好几个小时。我推荐仅仅build需要的库就好。)<br />原有的boost 1.33似乎使用vc8编译的时候有问题。下载boost 1.34.1,使用“Visual Studio 2005 Command Prompt”,进入到boost_1_34_1/libs/regex/build:<br />nmake vc8.mak<br />OK,生成的文转载 2011-04-17 11:20:00 · 481 阅读 · 0 评论 -
C++空类默认生成的构造函数
<br />ISO/IEC 14882(C++的国际标准文件)中说明:一个空类必须默认生成四个成员函数:构造函数,析构函数,拷贝构造函数,赋值函数 class Empty {<br /> public:<br /> Empty(); // 缺省构造函数<br /> Empty(const Empty& rhs); // 拷贝构造函数<br /> ~Empty(); // 析构函数 <br /> Empty& operator=(const Empty& rhs); // 赋值运算符<br原创 2011-04-17 11:21:00 · 3064 阅读 · 3 评论 -
C++编程关键路径-笔记
<br />一、预处理1、预处理主要包括四种类型文件包含、宏替换、条件编译、布局控制#pragma pack(n);//n:1、2、4、8、16,n只能为2的指数#pragma pack(push,n); #pragma pack(pop); //成对处理2、编译器预定义宏__DATE__ __FILE__ __LINE__ __TIME__ __FUNCTION__(函数名)二、字节对齐字节对齐的细节和编译器实现相关,但一般而言,满足三个准则:1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;原创 2011-04-17 11:22:00 · 662 阅读 · 0 评论 -
将整个文件读入string
<br />IOStream著名专家Dietmar Kuehl给过两个方法 <br /> 1、使用流迭代器 这种方法很简单方便,但有一个缺点就是会将文件中的空格省掉<br /> std::ifstream in("some.file"); <br /> std::istreambuf_iterator<char> beg(in), end; <br /> std::string str(beg, end); <br />2、使用字符串流<br />原创 2011-04-17 11:25:00 · 1516 阅读 · 0 评论 -
static关键字的作用
<br /><br />static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种在C/C++语言中使用, 第三种只在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准).<br />(1)局部静态变量<br />(2)外部静态变量/函数<br />(3)静态数据成员/成员函数<br />下面就这三种使用方式及注意事项分别说明<br />一、局部静态变量<br />在C/C++中, 局部变量按照存储形式可分为三种auto, static, register<br原创 2011-04-17 11:15:00 · 329 阅读 · 0 评论 -
笔试面试中问到的常见问题总结
面试的三大重点,第一个是项目,项目这个应该挺好说的,只要自己有这方面的准备;第二个是数据结构和算法,这个无论在笔试还是在面试中都很重要。第三个如果面C++方向的话,C++基础很重要。接下来谈一下后二者各自的一些常见问题。一、数据结构和算法 链表:链表逆序,判断链表中是否存在环字符串:字符串匹配,单词反转,查找倒数第K个结点,最小子串和二叉树:树的深度,树的镜像,树的遍历原创 2011-11-22 20:08:54 · 994 阅读 · 0 评论