[C++]1.2 关于const与define ,c++对c的增强

C++对C的增强:

1.全局变量检测增强

C语言全局变量中允许出现 int n;int n=1;的情况,C++则不允许这种重复定义

2.函数检测增强

函数中的 参数类型、参数个数(函数调用参数)、返回值 的检测都更加严格。

3.类型转换增强

malloc返回值是void* 通常使用时会有个强行转换。C++语言中对malloc返回值类型的强制转换更加严格。

4.struct 结构增强

①C++中struct的成员允许有函数的出现和调用。

②定义结构变量时只需要结构命名,不需要前面再加struct。

5.bool类型增强

C++中新增的bool类型只占1个字节,情况为非0和0;前者值为1,后者值为0。并且定义时可以用true和false表示。

6.三目运算符增强

C语言里的三目运算符(条件运算符)返回一个值;而C++里返回的是一个变量,这种情况除非C使用一个指针。

7.const 功能增强

1.C语言中的const默认为外部链接 而C++里的const默认为内部链接,从其他文件调用需要使用extern const形式。

2.C语言里的全局const变量是受保护的只读形式,而局部变量里的const装态是一个伪变量的形式(同理不能表示数组长度),可以利用指针等方式修改数值。C++的const则不能被修改。前者的存储形式是分配内存,而后者是以符号表的形式存储。

const分配内存的情况:

1.指针指向const的变量(取地址操作)时,有一个临时分配的内存空间(与变量的存储无关,只代表指针的存储),这一点在引用上同样适用。

2.初始化const变量的是另一个变量,会分配内存空间。

3.extern编译器会给extern const 变量分配内存

4.const自定义数据也会分配内存

尽量用const代替define(宏常量)        #undef A 取消宏常量A

1.define无作用域无作用时间,全局全程;const作用域和生存周期为局部函数。

2.define 数据没有类型,不能进行类型检查没有很好的适用性。并且define的数据在预处理阶段完成,编译器不能发现它的问题。

3.宏常量不受命名空间约束,且不能从命名空间调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值