C++相对于C的增强

1.C++更严格的语法、更严格的类型转换
更严格的语法:

  • C语言中 int a=0; 赋值当作定义
    int a; 未赋值当作声明
    这在C++中 冲突

更严格的类型转换:
C++不同类型的变量一般不能直接赋值,需要相应的强制转换

新增 bool 类型,有 true 、 false,一个字节

2.struct类型增强:

C++中定义结构体变量不必加 struct 且可以定义成员函数
struct A
{
    int a = 10;
    char b[32];
    void  func(void)
    {
        cout << "hello" << endl;
    }
};
A 变量名; //定义一个结构体变量

3.三目运算符增强(a>b?a:b)

C语言三目运算表达式返回的值为右值;
C++返回值为变量本身(引用),为左值,可修改
举例:
	int c=0;
	int a=10,b=20;
	c = a > b ? a = 50 : b = 30;
运行结果是:c=30,a=10,b=30
(左值右值是相对于表达式而言的。左值可写,右值可读。)

4.const
C语言中

  • const 变量的本质是变量,只读变量
    const修饰的全局变量默认是 外部链接的:其他源文件可用,位于文字常量区,不可通过指针写
    局部变量(栈区)可以通过指针间接写
    extern 用来声明全局变量

C++中

  • const修饰的全局变量是 内部链接的
    extern 将内部链接转为外部链接
    对于基础类型,系统不必开辟空间,为常量,而是放在符号表中(类似于宏 key-value),是否开辟空间,却决于如何使用
    取地址时和用变量给只读变量赋值,会分配内存,但后者不会将变量放入符号表
    使用变量名是从符号表中取值,变量的空间地址的值与符号表中的值不是对应关系
    使用指针写只是改变的变量地址的值

只读自定义数据类型(结构体、类),会分配内存,只能对局部变量通过指针修改

尽量用 const 代替宏(优点在于 const的错误能在编译的时候被编译器发现 而对于define则只是做替换 没有类型检查,作用域是当前文件)
宏只属于当前文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值