1、i++和++i有什么区别?
相同的是变量进行自增操作,区别在于i++返回自增前的值,++i返回自增后的值
2、i++和++i哪个效率更高?
当i是内置类型时,由于编译器的优化,会使得i++和++i效率相同
当i是自定义数据类型时,i++会创建临时对象,因为有了新对象的构造和析构,所以++i的效率高于i++
3、怎样的写出风格良好的条件比较语句?
当变量是bool类型,使用(!)取反来判断true,false较好,例如: if(!flag)
当变量是整型,使用==来判断较好
当变量是浮点型,需要考虑误差,例如:if(x>=1-epsinon&&x<=1+epsinon),这里比较x和1,允许的误差为epsinon
4、有符号变量和无符号变量的区别?
有符号变量的最高位被用来记录符号,而无符号变量的最高位是数值位
5、将两个变量进行交换有哪些方法?
以变量a,b为例
利用中间变量temp交换:
temp=a;
a=b;
b=temp;
如果a,b是数值类型,还可以
利用加减转换(可能溢出):
a=a+b;
b=a-b;
a=a-b;
利用异或转换
a=a^b;
b=a^b;
a=a^b;
6、C和C++有什么区别?
C是过程型语言,注重的是数据结构与算法,而C++可以说是一个语言的联邦,除了兼容C,它还支持了面对对象技术,模板元编程技术等。过程化和面对对象是两种解决问题的方法,过程化是通过设计一个过程,对输入进行处理,从而得到输出,而面向对象则是考虑构造一个对象模型,让这个对象模型能配合对应的问题,通过处理对象状态控制过程输出。
7、标准头文件结构的理解?
#ifndef __WORK //if not define 防止多次引入
#define __WORK
#ifdef __cplusplus //这个宏代表C++编译器
extern "C" { //extern表示作用域扩展,告诉编译器,声明的函数或变量可以在其他模块中使用
#endif //C修饰的变量和函数是按照C语言的方式编译和连接的
void fun(int x, int y) {} //C++生成的函数符号为_fun_int_int,而C只有_fun
/*插入扩展*/
#ifdef __cplusplus
}
#endif
#endif // !__WORK
8、#include<>和include""的区别是什么?
<>表明是标准头文件,查找过程检查预定义目录(可以通过设置环境变量或命令行选项修改)
""表明是用户自定义文件头文件,查找过程检查当前(或指定)文件目录,然后会在标准位置寻找文件
9、C/C++中的atexit函数?
使用atexit函数注册的函数会加入到一个栈中,当main函数结束后,从栈顶开始调用,一个程序最多可以注册32个处理函数
#include <iostream>
using namespace std;
void fun1() {
cout << "this is fun 1" << endl;
}
void fun2() {
cout << "this is fun 2" << endl;
}
int main() {
atexit(fun1); //注册函数
atexit(fun2);
return 0;
}
//输出
//this is fun 2
//this is fun 1
10、是否了解C++中的未定义行为?
语言标准未做规定的行为,这些行为有编译器自行处理,在不同的编译器可能会产生不同的结果。
常见的比如:a[i]=i++;