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;
}

相关推荐

  1. c++语言增强地方

    2024-04-10 17:12:01       14 阅读
  2. C语言C++和C#区别在什么地方

    2024-04-10 17:12:01       8 阅读
  3. 大型语言模型智能助手:检索增强生成(RAG)

    2024-04-10 17:12:01       20 阅读
  4. KerasCV和KerasNLP:视觉和语言增强

    2024-04-10 17:12:01       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-10 17:12:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-10 17:12:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-10 17:12:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-10 17:12:01       20 阅读

热门阅读

  1. SCP收容物061~070

    2024-04-10 17:12:01       16 阅读
  2. 网络安全的基础

    2024-04-10 17:12:01       16 阅读
  3. 算法| ss 贪心

    2024-04-10 17:12:01       13 阅读
  4. 机器学习中的 K-均值聚类算法及其优缺点

    2024-04-10 17:12:01       20 阅读
  5. 200方啤酒酿造废水处理设备厂家定制

    2024-04-10 17:12:01       12 阅读
  6. .NET常见的20个面试题

    2024-04-10 17:12:01       14 阅读
  7. Linux 数据盘分区自动化脚本 pro/plus 版本

    2024-04-10 17:12:01       14 阅读
  8. postcss

    2024-04-10 17:12:01       16 阅读