c++语言增强的地方

目录

1.对全局变量的检测能力

2.struct类型增强

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

4.c++中新增的bool类型

5.三目运算符的加强

6.const的增强

7.对枚举的增强


1.对全局变量的检测能力

  • C语言中同时定义两个相同的全局变量编译器并不会报错,而c++中就会报重定义错误
#include<stdio.h>
int g_a;//bss段
int g_a=10;//data段
int main()
{
   printf("%d",g_a);//最后对打印出10
   return 0;
}
#include<iostream>
using namespace std;

int g_val;
//int g_val = 20;//c++会报g_val重定义
int main(void)
{
   printf("%d",g_val);
}

2.struct类型增强

  • C语言中创建结构体类型的变量必须加struct关键字
#include<stdio.h>
struct student
{
   int id;
   char name[34];
};
int main()
{
  struct student s1;
  //student s1;//err
  return 0;
}
  • c++可以不加struct结构体关键字
#include<iostream>
struct student 
{
   int id;
   char name[43];
}
int main(void)
{
   student s1;
}

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

  • C语言接受没有返回类型的函数,接受单个形参传递多个实参的情况
#include<stdio.h>
f()//函数没有返回类型默认返回类型为整形,所以在C语言中不会报错
{
   return 10;
}
int g(int a)
{
   return 10;
}
int main()
{
   f();
   g(20,30,40,50);//C语言接受单个形参传递多个实参
   return 0;
}

4.c++中新增的bool类型

#include<iostream>
using namespace std;
int main()
{
   bool flag=true;
   flag = true;
   cout<<"flag(true)="<<flag<<endl;
   flag = false;
   cout<<"flag(false)="<<flag<<endl;
   flag=20;
   cout<<"flag="<<flag<<endl;
   return 0;
}
  • bool类型的变量的值只有0和1两种

5.三目运算符的加强

  • C语言中三目操作符不能当左值来使用
#include<stdio.h>
int main()
{
   int a=10;
   int b=20;
   int c=0;
   //左值  右值
  
   c=(a<b?a:b);

   printf("c=%d\n",c);

   (a<b?a:b)=50;//C语言中三目运算符不能当左值
   //10
   //10=50;
   return 0;
}
  • c++中三目操作符可以当左值来使用

6.const的增强

int const b; //代表一个常整形数

const int* c;//c是一个指向常整型数的指针(所指向的内存数据不能被修改,但本身可以修改)

int* const d;//常指针(指针变量不能被修改,但是他所指向的空间可以被修改)

const int* const e;//一个指向常整形的常指针(指针和它所在的内存空间,均不能被修改)

  • C语言中const修饰的变量并不能改变成为常量
#include<stdio.h>
int main()
{
   const int a=10;
   int* p=&a;
   *p=70;
   return 0;
}

最后a会改变成为70,说明被const修饰的a并没有成为常量

  • c++中const修饰的变量就算通过指针也不会被改变

#include<iostream>
using namespace std;
int main()
{
   const int a=10;
   int* p=(int*)&a;
   *p=20;
   cout<<"a="<<endl;
   cout<<"*p="<<*p<<endl;
   return 0;
}

c++中const修饰的变量在赋值时并不是在栈区开辟空间,而是在符号表。

思考:常量可以取地址吗??

答:如果对一个常量取地址,编译器会临时开辟一个空间,让这个指针存放这个临时空间的地址

7.对枚举的增强

C语言中枚举本质就是整形,枚举变量可以用任意整形赋值。而c++中枚举变量,只能用枚举出来的元素初始化。

#include<iostream>
using namespace std;
enum season
{
   SPR,
   SUM,
   AUT,
   WIN,
};
int main(void)
{
   enum season s=SPR;
   //s=0 //err  但是C语言可以通过
   s=SUM;
   return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

写不出bug的小李

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

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

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

打赏作者

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

抵扣说明:

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

余额充值