- 全局变量检测增强
int a;
int a = 10;
上面的代码在C语言中不会检测出重定义,在C++代码中会检测出,代码会报错
- 函数检测增强
int area(w,h){}
上面的代码在C语言中只是警告,在C++中需要加上参数类型和返回值,否则会报错,正确的写法是下面的代码
int area(int w,int h){
return w*h;
}
另外,C语言中参数个数传递错误不会报错,C++会检测出错误
- 类型转换增强
int main() {
int *p;
int *x;
p = malloc(sizeof(int));//在C++中会报错,需要强转成int*
x = (int *) malloc(sizeof(int));
cout << p << endl;//0x1031760
cout << x << endl;//0x1031780
/*
* malloc函数
* 找一片指定大小的空间,然后将这个空间的首地址范围给一个指针变量
* malloc的返回值是void*,可以指向任意类型,类型需要强制类型转换
* 这里强转成int类型的指针
*/
return 0;
}
- 结构体增强
struct Person {
int m_age;
void plus_age(){ age++; }//C语言中结构体不能加函数,C++可以
};
int main() {
struct Person p1;//C语言使用的时候必须加入struct关键字,C++可以不写
Person p2;
return 0;
}
- bool类型增强 C语言中没有bool类型,C++有bool类型,并且bool类型的值可以赋为int类型,非0代表真,0代表假
bool flag;
- 三目运算符增强
int main(){
int a=10,b=20;
cout << (a>b ? a:b) << endl;//20
return 0;
}
另外,看一下下面的代码
a>b ? a:b = 100;
这行代码C语言编译报错,C++ 不会,区别在于C语言返回值,相当于20=100,C++ 返回变量,相当于a或b=100,注意要加上小括号,否则只有b有资格被赋值