c++对c的扩展

语法检查增强

全局变量检测增强

int a = 10;
int a;

int main()
{
	printf("a = %s\n",a);
	return EXIT_SUCCESS;
}

此代码在C++编译下失败,在c下编译通过;

c++中所有的变量和函数都必须有类型

int fun(i)
{
	printf("%d\n",i);
	return 0;
}
int fun2(i)
{
	printf("%s\n",i);
	return 0;
}
int fun3()
{
	printf("fun3\n");
	return 0;
}

以上代码在c的编译下通过,在c++编译器无法通过;

更严格的类型转换

在 C++,不同类型的变量一般是不能直接赋值的,需要相应的强转。

typedef enum COLOR{ GREEN, RED, YELLOW } color;
int main()
{
	color mycolor = GREEN;
	mycolor = 10;
	printf("mycolor:%d\n", mycolor);
	char* p = malloc(10);
	return EXIT_SUCCESS;
}

以上代码 c 编译器编译可通过,c++编译器无法编译通过;

c++对结构体的增强

1、c中定义结构体变量需要加上struct关键字,c++不需要
2、c中的结构体只能定义成员变量,不能定义成员函数。
c++即可以定义成员变量,也可以定义成员函数

c代码

struct stu
{
    int num;
    char name[32];
/* c语言 不允许在结构体中  定义成员函数
    void func(void)
    {
        printf("我是结构体中的func");
    }
    */
};
void test01()
{
    //C语言必须加struct
    struct stu lucy = {100, "lucy"};
}

c++代码

struct stu
{
    int num;
    char name[32];
    //c++语言 允许在结构体中  定义成员函数
    void func(void)
    {
        printf("我是结构体中的func");
    }
};
void test01()
{
    //C++语言不用加struct
    stu lucy = {100, "lucy"};
    
    //调用结构体中的成员方法(成员函数)
    lucy.func();
}

c++中新增bool类型

标准 c++的 bool 类型有两种内建的常量:true(转换为整数 1)和 false(转换为整数 0)表示状态。这三个名字都是关键字。bool 类型只有两个值,true(1 值),false(0值) bool 类型占 1 个字节大小;给 bool 类型赋值时,非 0 值会自动转换为true(1),0 值会自动转换 false(0)。

void test02()
{
    bool mybool;
    cout<<"sizeof(bool) = "<<sizeof(bool)<<endl;//1字节
    mybool = false;
    cout<<"false = "<<false<<endl;//0
    cout<<"true = "<<true<<endl;//1
}

三目运算符的功能增强 (a>b?a:b)

c语言三目运算表达式返回值为数据值,为右值,不能赋值

c代码

void test02()
{
    int a = 10;
    int b = 20;
    printf("C语言:%d\n", a>b?a:b);//20

    //a>b?a:b整体结果 右值(不能被赋值)
    //a>b?a:b = 100;//err不能被赋值
}

c++语言三目运算表达式返回值为变量本身(引用),为左值,可以赋值

c++代码

void test02()
{
    int a = 10;
    int b = 20;
    cout<<"c++中:"<<(a>b?a:b)<<endl;

    //a>b?a:b整体结果是变量本身(引用) 左值(能被赋值)
    a>b?a:b = 100;//b =100
}

左值和右值的概念
在这里插入图片描述
总的来说:能被赋值的就是左值 不能被赋值的就是右值

c++中的const

在C语言中:
1、const修饰全局变量num 变量名只读 内存空间在文字常量区(只读)、不能通过num的地址 修改空间内容
2、const修饰局部变量data 变量名只读 内存空间栈区(可读可写),可以通过data地址 间接的修改空间内容

在c++中:
1、const int data = 10;//data先放入符号表
2、如果对data取地址 系统才会给data开辟空间
3、const int a = b;//b是变量名 系统直接给a开辟空间 而不放入符号表
4、cosnt 修饰自定义数据 系统为自定义数据开辟空间

const与#define的区别

1.const有类型 宏没有;
2.宏的作用域为整个文件,const作用域以定义情况来定;
3.宏不能作为命名空间的成员 const可以。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值