本文已参与「新人创作礼」活动,一起开启掘金创作之路。
问题一:define和const的区别?
联系:两者都是定义常量的一种方法。
区别:(1)define定义常量无类型,在使用处知识进行了简单替换,可能存在多个拷贝,比较消耗内存;const定义变量有类型,存放在静态存储区,只有一个拷贝,比较节省内存。
(2)define定义常量在预处理阶段进行替换,没有安全类型检查;const会进行安全类型检查。 (3)define可以定义函数,define不可以。
问题二:const的用法和作用?
const修饰成员变量,表明常量不可以修改。
const修饰类的成员函数,表示该函数不会修改类中的数据成员,不会调用其他非const类型成员函数。
问题三:static用法和意义?
static可以修饰变量、函数和类的成员。
被static修饰的变量称为静态变量,在程序的运行过程中会一直存在,存储在静态存储区,局部静态变量的作用域在函数体内,全局静态变量的作用域在整个文件中,交叉开发时,为了防止自己函数与他人函数重名,常用静态static进行修饰。
static修饰类的成员变量时,称为类静态成员,静态成员会被类的多个对象所共用。被static修饰的成员函数也属于静态成员,它不属于某个对象,访问此函数时不需要引用对象名,而是通过引用类名进行访问。
静态成员函数访问非静态成员函数时,需要通过对象来引用。局部静态变量在函数调用结束后不会马上被回收,会一直存在到程序整个运行过程,下次调用时依然保持有上次调用的结果值。
问题四:空类的大小是多少?
空类的大小为1字节,主要原因时为了让对象的实例能够相互区别。空类可以被实例化。空白类作为基类时,类的大小为0,子类的大小就是子类本身大小,即所谓的空白基类最优化。
问题五:STL中hash表的实现?
STL中hash表就是unordered_map,使用的是哈希表进行实现,map使用的是红黑树,注意区分。它记录的键是元素的哈希值,通过对比元素的哈希值来确定元素的值。在解决哈希冲突时采用的是开链法,当桶的大小超过8时,自动转化为红黑树进行组织。