[TOC]
问题部分
1.说说include头文件的顺序以及双引号””和尖括号<>的区别
2.导入C函数的关键字是什么,C++编译时和C有什么不同?
3.C++中前置操作性能一定优于后置操作吗?
4.
答案部分,仅供参考
答案1.说说include头文件的顺序以及双引号””和尖括号<>的区别
区别:
- (1)尖括号<>的头文件是系统文件,双引号””的头文件是自定义文件。
- (2)编译器预处理阶段查找头文件的路径不一样。
查找路径:
- (1)使用尖括号<>的头文件的查找路径:编译器设置的头文件路径–>系统变量。
- (2)使用双引号””的头文件的查找路径:当前头文件目录–>编译器设置的头文件路径–>系统变量。
答案2.导入C函数的关键字是什么,C++编译时和C有什么不同?
- 关键字:在C++中,导入C函数的关键字是extern,表达形式为**extern “C”**, extern “C”的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern “C”后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。
- 编译区别:由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。
1 | //extern示例 |
答案3.C++中前置操作性能一定优于后置操作吗?
结论:
- 原理来说:前置操作遵循的规则是change-then-use,而后置操作遵循的规则是use-then-change。所以,前置操作就地修改对象;后置操作的时候,会使得编译器在实现该操作的时候,先把之前的值进行拷贝备份,然后对值进行更改操作,最后返回之前备份的值。因此,后置操作会产生临时变量,而前置操作不会。
- 对于内置类型,前置操作和后置操作二者在性能上无差异,这是因为编译器会对其进行优化。
- 对于自定义类型,前置操作的性能远优于后置操作。除非必须使用i++以满足编码场景,否则,在任何情况下都建议使用++i这种前置操作。
- 很多人都会认为前置操作性能优于后置操作,这是错误的观点,在此进行下纠正,准确的说法应该是前置操作不会比后置操作性能差。