标准库
- C++的标准库头文件将不带
.h
后缀,且为C标准库也重新定义了一系列不以.h
为后缀的头文件。 - 但新式的C头文件只是对旧式C头文件进行了一系列封装
...
#pragma GCC system_header
#include <bits/c++config.h>
#include <stdio.h>
#ifndef _GLIBCXX_CSTDIO
#define _GLIBCXX_CSTDIO 1
...
空指针
- C语言中的
NULL
被定义为(void*)0
- 而在C++中,
NULL
被定义为0
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
- 在C++中如果要使用空指针,需要使用
nullptr
;其实际上是一个std::nullptr_t
类型的对象
int main(){
std::cout << NULL << std::endl;
std::cout << nullptr << std::endl;
return 0;
}
void参数
- C11标准下,函数定义时,如果参数列表不填,将视为任意参数列表
void call(){
printf("call\n");
}
int main(void){
call(1,2,3);
call(1);
return 0;
}
- 而在C++11中,函数定义时,参数列表为
void
或不填没有任何区别 - 这也就是为什么在C中,如果函数不需要参数,最好加上
void
,而在C++中则不需要
无名形参和默认实参
- C++支持无名形参和默认实参,C并不支持
- 无名形参,即可以只指定参数类型,而无需参数名
void call(int){
std::cout << "call" << std::endl;
}
int main(){
call(0);
return 0;
}
- 默认实参,被赋予默认值的形参后所有的形参,都必须拥有默认值
void call(int arg_1 = 10,double arg_2 = 0){
std::cout << "call" << std::endl;
}
int main(){
call(0);
return 0;
}
结语