【C++相对于C的扩展】3.C++相对于C的一些增强

目录

前言

 1.全局变量的检测增强

 2.C++中所用变量和函数都必须有类型

3.更严格的类型转换

4.C++对struct的增强

5.新增bool类型关键字

6.三目运算符的增强

总结


前言

  C++在一些方面相对于C有了一定的增强,就像是有个叫张三的朋友,经过锻炼,肌肉增加了一样。

  那么,C++究竟在哪些方面对C进行了增强呢?下面我们将从下面六个方面来进行探讨一下。

  1. 全局变量的检测增强
  2. C++中所用变量和函数都必须有类型
  3. 更严格的类型转换
  4. C++对struct的增强
  5. 新增bool类型关键字
  6. 三目运算符的增强 

 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语言中,所用变量和函数可以没有类型,主要有以下几种情况:

  1. 函数类型可以不写,默认为int类型
  2. 函数形参类型可以不写,默认为int类型
  3. 函数对传入的参数的个数不作检测
  4. 函数没有返回值可以返回

  下面用代码演示一下以上的情况(可能有些凌乱,大家耐心一点,应该能够理解):

 (注:大家在实际写代码时,千万别这么写,可能会被“挨揍”)

   在C语言的这种写法显得不够严谨,让人感觉有点混乱。因此,C++在此基础上做出了相应的改进(与C语言恰好相反),主要如下:

  1. 函数类型必须写
  2. 函数形参类型必须写
  3. 函数有返回类型,没有返回值不能返回
  4. 函数会检验传入的参数的个数

  当我们将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方面的增强,内容有点多,需要一定的耐心来理解。如果您能认真看到这里,不妨给自己一个大大的赞吧。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

边城仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值