C++笔记1—C语言的增强

本文深入探讨了C++相较于C语言在命名空间控制、变量定义灵活性、变量检测、struct类型、bool类型、三目运算符、const常量、枚举类型等方面的显著增强,通过实例对比,阐述了这些改进如何提升了C++的实用性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、命名空间
(1)namespace:更好地控制标识符的作用域,命名空间将全局作用域分成不同的部分,不同命名空间中的标识符可以同名而不会发生冲突,命名空间可以相互嵌套,全局作用域也叫默认命名空间。
(2)命名空间的定义:
namespace name {。。。}
(3)命名空间的使用
使用整个命名空间:using namespace name;
使用命名空间里的变量:using name::variable;
直接使用:name::variable;

2、实用性增强
C语言的变量必须在作用域开始的位置定义,C++更强调语言的实用性,所有的变量可以在需要使用时再定义。

3、变量检测增强
在C语言中,重复定义多个同名全局变量是合法的,多个同名全局变量最终会被链接到全局数据区的同一个地址空间上;C++直接拒绝这种二义性做法,不允许定义多个同名的全局变量。

4、struct类型的增强
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型
C++中的struct是一个新类型的定义声明
struct student
{
char name[20];
int age;
};
student st1={“zyl”,24};
student st2={“zh”,24};

5、新增bool类型关键字
C++的bool可取值只有true和false;true代表真值,编译器内部用1来表示;false代表非真值,编译器内部用0来表示;bool类型只有true和false两个值;C++编译器对bool类型赋值式将非0值转换为true,0值转换为false。

6、三目运算符功能增强(表达1?表达式2:表达式3)
(1)在C语言中三目运算符返回的是变量值,不能作为左值使用;C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方。
(2)三目返回值中如果有一个是常量,则不能作为左值使用,例如:(a<b?1:6)=30
(3)当左值的条件:要有存储空间,因此C++编译器帮助程序员取了一个地址而已
C++里的(a<b?a:b)=30等价于C语言里的*(a<b?&a:&b)=30

7、const增强
C语言中const变量是只读变量,有自己的存储空间
注:可以通过指针改变const修饰的变量,const int a=10; int *p=&a;
*p=20;因此不是常量 ,是只读变量,无法定义数组大小
C++中的const修饰的是一个真正的常量,在const修饰的常量编译期间就确定下来。定义在符号表中,在只读区域的text段,和代码段类似。可以定义数组的大小。
C++中如果对一个常量取地址,编译器会临时开辟一个会计,让指针存放这个临时会计的地址。 例如:
cosnt int a=10;//a是真正的变量
int *p=(int *)&a;
*p=20;//改变的是临时开辟的temp变量,不会改变常量a
C++中const常量与宏定义的不同
const常量是由编译器处理的,提供类型检查和作用域检查
宏定义由预处理器处理,单纯的文本替换。

8、真正的枚举
C语言中枚举本质就是整型,枚举变量可以用任意整型赋值。而C++中枚举变量,只能用呗枚举出来的元素初始化,也只可以可枚举出来的元素比较。
enum season{SPR,SUM,AUT,WIN};
int main()
{
enum season s=SPR;//正确
if(s==SUM)//正确
enum season a=0;//错误
if(s= =0)//错误
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值