目录
前言
C++在一些方面相对于C有了一定的增强,就像是有个叫张三的朋友,经过锻炼,肌肉增加了一样。
那么,C++究竟在哪些方面对C进行了增强呢?下面我们将从下面六个方面来进行探讨一下。
- 全局变量的检测增强
- C++中所用变量和函数都必须有类型
- 更严格的类型转换
- C++对struct的增强
- 新增bool类型关键字
- 三目运算符的增强
1.全局变量的检测增强
我们知道,我们可以在全局范围内写上全局变量。那当我们在全局范围内写三个相同int a会发生什么呢?事实上,C和C++的情况是不一样的。
C语言中的情况:
C++中的情况:
可以看到,C语言并没有报错,而C++中报错,显示int a重定义。这是因为C++对全局变量中的声明和定义有了 严格的区分,检测会增强。我们单纯在C++中的全局范围内写一个int a,编译会把这个认为是定义,而非声明。但在C语言中,这种区分就没那么明显。C语言会将三个int a中的某一个变量认为是定义,而另外两个则认为是声明,具体哪一个是定义,哪两个是声明,是随机的。 如果我们想在C++的全局范围内声明一个变量,那么我们可以怎么做呢?
可以看到,当我们在两个全局变量前加上extern关键字时,这个C++程序就没有报错了 。在这里,extern int a 就是一个声明。
C++全局变量的检测增强,我们可以更加清楚地区分出究竟哪个是定义,哪个是声明,从而避免了C语言中的随机定义与声明。
2.C++中所用变量和函数都必须有类型
在C语言中,所用变量和函数可以没有类型,主要有以下几种情况:
- 函数类型可以不写,默认为int类型
- 函数形参类型可以不写,默认为int类型
- 函数对传入的参数的个数不作检测
- 函数没有返回值可以返回
下面用代码演示一下以上的情况(可能有些凌乱,大家耐心一点,应该能够理解):
(注:大家在实际写代码时,千万别这么写,可能会被“挨揍”)
在C语言的这种写法显得不够严谨,让人感觉有点混乱。因此,C++在此基础上做出了相应的改进(与C语言恰好相反),主要如下:
- 函数类型必须写
- 函数形参类型必须写
- 函数有返回类型,没有返回值不能返回
- 函数会检验传入的参数的个数
当我们将C语言中能正常运行的代码放到C++中,我们就会发现,一堆报错信息劈头盖脸地袭来。
3.更严格的类型转换
C语言会自动帮我们做一些类型的转换,但是,C++在这方面做出了更加严格的限制。
可以看到,C语言能自动帮我们进行从void*到char*类型的转换,但是,这在C++中编译会报错。
解决措施如下:
C++中这种限制,也是有一定的好处的,比如我们在编写代码时,能够很清楚的明白这个类型到底是由谁转换而来的,增强了代码的可读性。
4.C++对struct的增强
C语言声明结构体变量时,需要在前面加上struct关键字,不然会报错;C++在这个方面进行了增强,无论是否在前面加上struct关键字,C++都能正常运行。
5.新增bool类型关键字
在C语言中,若要使用bool类型,必须引入一个头文件,否则无法使用bool类型,而在C++可以直接使用bool类型。
C语言:
#include<stdio.h>
#include<stdbool.h>//在C语言中,若要使用bool类型,必须引入该头文件,否则无法使用bool类型
//编写一个函数,判断a是否比b大
bool BigNum(int a, int b) {
if (a > b) {
return true;
}
else {
return false;
}
}
int main() {
int a = 6;
int b = 4;
if (BigNum(a, b)) {
printf("a大于b");//会输出这段语句
}
else {
printf("a小于b");
}
return 0;
}
C++:
#include<iostream>
using namespace std;
//编写一个函数,判断a是否比b大
bool BigNum(int a, int b) {
if (a > b) {
return true;
}
else {
return false;
}
}
int main() {
int a = 6;
int b = 4;
if (BigNum(a, b)) {
cout << "a大于b";//输出该语段
}
else {
cout << "a小于b";
}
return 0;
}
6.三目运算符的增强
C语言与C++中三目运算符的主要区别如下:
- 在C语言中三目运算符返回的是表达式的值,是一个常量。
- 在C++中三目运算符返回的是一个变量。
下面我们举个例子说明。
总结
本篇文章介绍了C++相对于C语言的6方面的增强,内容有点多,需要一定的耐心来理解。如果您能认真看到这里,不妨给自己一个大大的赞吧。