c++小知识点汇总

能不能使用struct代替模板的class/typename

答: c++保留struct主要为了兼容c语言,但是在c语言中是不存在模板的,所有没有必要在模板中支持struct声明模板形参。

重复free会发生什么

答:编译通过,运行时出错。由于free之后没有立即初始化,可能会被注入病毒。http://d0m021ng.github.io/2017/02/24/PWN/Linux%E5%A0%86%E6%BC%8F%E6%B4%9E%E4%B9%8BDouble-free/

nullptr解决了什么问题

在c语言中,0可以用来表示空指针,在c++中,不允许void指针隐式转换为其他类型指针,但是允许0作为指针类型的字面值常量。因此会遇到下面这种问题:

1
2
3
4
5
6
7
8
9
10
11
void func(char *str){
//do something
}

void func(int val){
// do something
}
int main(){
func(NULL);
return 0;
}

这里调用的是void func(int)这个函数,在编译时也有可能报二义性错误。