互联网笔试面试经典问题.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
互联网笔试面试经典问题

const和#define的区别:(c++定义常量的方式)1. 编译器处理方式不同define宏是在预处理阶段展开。const常量是编译运行阶段使用。2. 类型和安全检查不同define宏没有类型,不做任何类型检查,仅仅是展开。const常量有具体的类型,在编译阶段会执行类型检查。3. 存储方式不同define宏定义不占内存const常量占用内存(可以是堆中也可以是栈中)。4. const常量有适当的作用域,而宏常量的作用域是全局的,也就是说宏常量不具有封装性。5. const常量可以取地址,宏常量不可以取地址。const作用在c++中,const是类型修饰符。1. 使用const修饰的变量,值不能被更改;2. const还可以修饰函数参数、函数返回值和函数本身;3. 函数可以根据是否为const进行重载;类中const成员初始化:在初始化列表中初始化。static作用static用来控制变量的存储方式和可见性。1. static变量存储在程序的静态存储区。(函数执行结束不会释放存储空间)2. static把变量的可见范围限制在编译单元中,使它成为一个内部链接。总结:static总是使得变量或对象的存储形式变成静态存储,链接方式变成内部链接。对于局部变量(已经是内部链接了),它仅改变其存储方式;对于全局变量(已经是静态存储了),它仅改变其链接类型。类中的static成员:(static数据成员、static成员函数)static成员和类相关,而不是和类的对象相关。项目中有没有用过static?全局变量、静态全局变量、静态局部变量:当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量只在定义该变量的源文件内有效,在同一源程序的其他源文件中不能使用它。?(把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。)static成员初始化:static成员必须在类定义体的外部定义,而且应该在定义时初始化。但是,整形const static数据成员就可以在类的定义体中进行初始化。函数局部static变量初始化:c++中,在第一次用到时才会被初始化(lazy initialization)。全局static变量的初始化在编译的时候进行。extern关键字:C和C++对函数的处理方式(名称修饰)是不同的.extern C是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern C来说明。名称修饰防止命名冲突,比如重载函数,不同类中的同名变量等。volatile关键字:volatile的本意是“易变的”,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。关键字volatile是给编译器的指示,指出对这样的对象不应该执行优化。volatile基本可以做到两件事情:1. 阻止编译器为了提高速度将一个变量缓存到寄存器内而不写回。2. 阻止编译器调整操作volatile变量的指令顺序。模板和宏的区别:1. 模板是类型安全的,宏不是。(编译器对模板进行类型安全检查)2. 宏在预编译阶段直接展开,而模板编译后,只有在用到时才实例化。(C++模板的一个特殊的机制:模板中的代码只有在用到时才会被实例化。编译器并不会完全展开整个模板类。只有当访问了模板上的某个成员函数时,才会将成员函数的代码展开作语义检查。)3. 模板的功能更加强大,支持偏特化、支持模板元编程。C++?设计了模板,设计了常量,设计了内联函数,居然还没有把宏给枪毙掉,真是个笑话。宏:优点:减少函数调用的开销。缺点:没有类型检查,debug困难(由于宏是由预处理器扩展的,因此编译器错误消息将引用扩展的宏,而不是宏定义本身。 此外,在调试过程中,宏将以扩展形式出现。)模板缺点:1. 模板是一种编译期间生成代码的行为,无法进行断点调试,所以很容易产生bug;2. 大量使用模板会造成代码空间膨胀,极大的延长了编译时间。宏和内联函数:内联函数有类型检查。宏定义是预处理器在代码优化时直接替换的,而内联函数是在编译期间插入代码.宏定义替换比内联函数执行得早。指针和引用的区别:1. 指针是一个实体,在逻辑上是独立的;引用是个别名,在逻辑上不是独立的2. 指针可以为空,引用不可以为空3. 引用需要初始化,指针不需要4. 指针可以被重新赋值,而引用总是指向最初的对象(引用在语言内部是用指针实现的,引用就是一个常量指针,当然也占内存)C 中指针和引用的物理实现是一回事,都是内存地址;两者的区别是在编译时编译器无法对指针操作进行类型检查,而对引用可以。这也是引用更安全的原因。引用是类型安全的,而指针不是引用传递与指

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档