C++
lgxqf
Optimisitc
展开
-
extern 用法详解
1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。2 问题:extern 变量 在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a; 请问,这样可以吗? 答案与分析:转载 2007-10-30 14:19:00 · 424 阅读 · 0 评论 -
C++中子类与基类的函数隐藏规则
本来仅仅区别重载与覆盖并不算困难,但是C++的隐藏规则使问题复杂性陡然增加。这里“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与原创 2007-10-30 15:21:00 · 1157 阅读 · 0 评论 -
变量存储方式
变量可以分为全局变量、静态全局变量、静态局部变量和局部变量 按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分:全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效原创 2007-11-02 15:06:00 · 619 阅读 · 0 评论 -
转载::VPTR与构造函数和继承 ; 虚函数与内联
C++中类的成员函数默认情况下是non-virtual,即被调用时为静态绑定。 至少包含一个virtual成员函数的类,都有一个VTABLE——虚函数映射表,表中的每项对应类中一个virtual成员函数的函数体地址。表中第一项对应的是type_info用于存储该类的一些信息,如类的名称。相应的该类的每个对象在为其分配存储空间时,编译器会额外的为每个对象附加一个指针VPTR,该指针指向转载 2007-11-11 22:24:00 · 879 阅读 · 0 评论 -
虚析构函数
虚析构函数在析构函数前面加上关键字virtual进行说明,称该析构函数为虚析构函数。例如:class B{ virtual ~B(); …}; 该类中的析构函数就是一个虚析构函数。 如果一个基类的析构函数被说明为虚析构函数,则它的派生类中的析构函数也是虚析构函数,不管它是否使用了关键字virtual进行说明。说明虚析构函数的目的在于在使用delete运算符删除一个对象时,能保原创 2007-11-12 09:42:00 · 589 阅读 · 0 评论 -
为什么返回值优化需要显示的提供一个子copy constructor,,,但是又不调用它呢?
返回值的主要目的就是为了消除由于调用copy constructor而导致的开销。如果你没有显示提供copy constructor,那么编译器就会为你自动合成一个,但是编译器很可能会认为自己合成的这个copy constructor是trivial的(也就是几乎什么都不做),也就是说调用这个自己合成的copy constructor并没有什么额外的性能开销,所以此时编原创 2007-11-14 11:43:00 · 474 阅读 · 0 评论