随笔分类 - C++
摘要:1:句柄在Windows编程中是一个很重要的概念,在许多地方都扮演着重要的角色。在Windows环境中,句柄是用来标识项目的,这些项目包括: (1)模块(module) (2)任务(task) (3)实例(instance) (4)文件(file) (5)内存块(block of memory) (
阅读全文
摘要:1:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄,句柄是一种指向指针的指针。 句柄和指针都是地址,不同之处在于: (1)句柄所
阅读全文
摘要:1:二者的区别如下: (1)内联函数在编译时展开,宏在预编译时展开。 (2)在编译的时候,内联函数可以直接被镶嵌到目标代码中,而宏只是一个简单的文本替换。 (3)内联函数可以完成诸如类型检测、语句是否正确等编译功能,宏就不具有这样的功能。 (4)宏不是函数,inline函数是函数。 (5)宏在定义时
阅读全文
摘要:1:内联是以代码膨胀(复制)为代价的,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间相比于函数调用的开销较大,那么效率的收获会很小。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。以下情况不宜使用内联: (1)如果函数体内的代码比
阅读全文
摘要:1:首先使用inline函数可以完全取代表达式形式的宏定义。 内联函数在C++类中的应用最广的应该是用来定义存取函数。我们定义的类中一般会把数据成员定义成私有的或者保护的,这样,外界就不能直接读写我们类成员的数据了。对于私有或者保护成员的读写就必须使用成员接口函数来进行。如果我们把这些读写成员函数定
阅读全文
摘要:1:有如下几种原因: (1)inline定义的类的内联函数,函数的代码被放在符号表中,在使用时直接进行替换(像宏一样展开),没有了调用的开销,效率也很高。 (2)类的内联函数也是一个真正的函数。编译器在调用一个内联函数时,首先会检查它的参数的类型,保证调用正确;然后进行一系列的相关检查,就像对待任何
阅读全文
摘要:1:引入内联函数的主要目的是,用它替代C语言中表达形式的宏定义来解决程序中函数调用的效率问题。在C语言里可以使用如下的宏定义: 这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈、代码生成等一系列的操作, 因此效率很。这种宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预
阅读全文
摘要:1:有如下代码: 代码第3行用#pragma pack将对其设为1.由于结构体test中的成员s1、s2和i的自身对齐分别为2、2和4,都小于1.因此它们都是用1作为对齐,sizeof(test)=1+2+2+4=9. 如果注释掉第3行,则编译器默认对齐为8.所以各个成员自身的对齐都小于8,因此它们
阅读全文
摘要:1:它们的区别如下: (1)sizeof是操作符,strlen是函数。 (2)sizeof操作符的结果类型是size_t,它在头文件中typedef为unsignedint类型,该类型保证能容纳实现所建立的的最大对象的字节大小。 (3)sizeof可以用类型作参考,strlen只能用char*做参考
阅读全文
摘要:1:全局变量的说明之前再加上static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于,非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的;而静态全局变量则
阅读全文
摘要:1:在C语言中,关键字static有3个明显的作用: (1)在函数体,一个被声明为静态的变量在这一函数被调用的过程中维持其值不变。 (2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所有的函数访问,但不能被模块外其他函数访问。它是一个本地的全局变量。 (3)在模块内,一个被声明为静态
阅读全文
摘要:1:作用如下: (1)const用于定义常量:const定义的常量编译器可以对其进行数据静态类型安全检查。 (2)const修饰函数形式的参数:当输入参数为用户自定义类型和抽象数据类型时,应该将“值传递”改为“const&传递”,可以提高效率。比较下面两段代码: 第一个函数效率低。函数体内产生A类型
阅读全文
摘要:1:#define只是用来做文本替换的。例如: 那么,程序进行编译的时候,编译器会首先将“#define PI 3.1415926”以后所有代码中的“PI”全部换成“3.1415926”,然后进行编译。因此,#define常量则是一个Coppile-Time概念,它的生命周期止于编译器,它存在于程序
阅读全文
摘要:1:实现代码: 需要注意的几点: (1)三元运算符(?:) (2)在宏中需要把参数小心地用括号括起来。因为宏只是简单的文本替换如果不知居易,很容易引起歧义。
阅读全文
摘要:1:标准头文件有如下结构,请解释。 代码#ifndef _INCvxWorksh,#define _INCvxWorksh,#endif /* _INCvxWorksh*/的作用是防止该头文件被重复引用。 代码#ifdef _cplusplus的作用是表示当前使用的是C++编译器。 代码4~8行中的
阅读全文
摘要:1:答:C是面向过程化的,但是C++不是完全面向对象化的。在C++中也完全可以写出与C一样过程化的程序,所以只能说C++拥有面向对象的特性。Tava是真正面向对象化的。
阅读全文