当前位置: 首页 > news >正文

C++学习Day01之C++对C语言增强和扩展

目录

  • 一、程序及输出
    • 1.1 全局变量检测增强
    • 1.2 函数检测增强
    • 1.3 类型转换检测增强
    • 1.4 struct增强
    • 1.5 bool类型扩展
    • 1.6 三目运算符增强
    • 1.7 const增强
      • 1.7.1 全局Const对比
      • 1.7.2 局部Const对比
      • 1.7.3 Const变量初始化数组
      • 1.7.3 Const修饰变量的链接性
  • 二、分析总结


一、程序及输出

1.1 全局变量检测增强

c 正常编译输出。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>//1、全局变量检测增强
int a;
int a = 10;
int main(){printf(" %d\n",a);system("pause");return EXIT_SUCCESS;
}

c++ 会检测出重定义
在这里插入图片描述

1.2 函数检测增强

c 正常编译输出

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
getRectS( w  , h)
{return w *h;
}
void test01()
{printf("%d\n", getRectS(10, 10, 10));
}
int main(){test01();system("pause");return EXIT_SUCCESS;
}

在这里插入图片描述

c++ 返回值检测、形参类型检测、函数调用参数个数检测
在这里插入图片描述

1.3 类型转换检测增强

c 类型检测不严谨 malloc 返回类型void*,正常编译通过。

void test02()
{char * p = malloc(64);
}

c++ 必须进行类型转换才能通过。
在这里插入图片描述
在这里插入图片描述

1.4 struct增强

c 结构体中不能有函数
在这里插入图片描述
c 创建结构体变量必须加关键字struct
在这里插入图片描述

c++ 可以放函数,创建结构体变量,可以简化关键字 struct
在这里插入图片描述

1.5 bool类型扩展

c 没有bool类型
在这里插入图片描述
c++ 有bool类型
在这里插入图片描述

1.6 三目运算符增强

c 三目运算符变量作为左值不可修改。
在这里插入图片描述

c++ 三目运算符增强,返回变量作为左值可被修改。

#include<iostream>
using namespace std;
void test05()
{int a = 10;int b = 20;printf("ret = %d\n", a > b ? a : b);(a < b ? a : b )= 100; // C++下返回的是变量  b = 100printf("a = %d\n", a);printf("b = %d\n", b);
}
int main(){test05();system("pause");return EXIT_SUCCESS;
}

在这里插入图片描述

1.7 const增强

1.7.1 全局Const对比

c 不可修改
在这里插入图片描述
使用指针修改

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
const int m_A = 100; // 受到常量区保护,运行修改失败
void test05()
{int * r = &m_A;*r = 200;printf("m_A = %d\n",m_A);
}
int main(){test05();system("pause");return EXIT_SUCCESS;
}

输出: 退出,没有修改成功
在这里插入图片描述

c++ 与C结论一致

1.7.2 局部Const对比

c 可以被修改

#include<stdio.h>
#include<string.h>
#include<stdlib.h>void test05()
{//局部constconst int m_B = 100; //分配到栈上//m_B = 200;  //直接修改会报错int * p = &m_B; //指针修改成功*p = 200; printf("%d\n", m_B);
}
int main(){test05();system("pause");return EXIT_SUCCESS;
}

输出:
在这里插入图片描述
c++ 修改失败

#include<iostream>
using namespace std;
void test06()
{//局部constconst int m_B = 100;//m_B = 200;//直接修改会报错int * p = (int *)&m_B;//指针修改失败*p = 200;cout << "m_B = " << m_B << endl;
}
int main(){test06();system("pause");return EXIT_SUCCESS;
}

输出:
在这里插入图片描述

1.7.3 Const变量初始化数组

c 初始化失败 C语言下Const修饰的是伪常量
在这里插入图片描述
c++ 初始化成功 :C++下const修饰的变量 称为常量 ,可以初始化数组
在这里插入图片描述

1.7.3 Const修饰变量的链接性

c 下const修饰全局变量默认是外部链接属性
主文件

#include<stdio.h>
#include<string.h>
#include<stdlib.h>int main(){extern const int g_a; printf("g_a = %d\n", g_a);system("pause");return EXIT_SUCCESS;
}

另外一个.c文件

 const int g_a = 100;

输出:
在这里插入图片描述
解析:

extern 关键字用于声明一个外部变量
c 下const修饰全局变量默认是外部链接属性,所以.c文件定义的变量没有使用extern 关键字,但是主文件能够通过extern关键字链接到真正需要的变量,体现了const修饰全局变量默认是外部链接属性这一特点。

c++下const修饰全局变量默认是内部链接属性
主文件

#include<iostream>
using namespace std;int main(){extern const int g_b ; cout << "g_b = " << g_b << endl;;system("pause");return EXIT_SUCCESS;
}

另外一个.cpp文件

extern const int g_b = 1000;

输出:
在这里插入图片描述
解析:

extern 关键字用于声明一个外部变量
两个文件都加了extern ,定义是在主文件里定义的,但是初始化却是在另一个.cpp文件初始化的,因为c++中const修饰全局变量默认是内部链接属性,所以外部文件初始化时需要使用extern关键字声明,如果去掉会编译报错。


二、分析总结

C++对C语言增强和扩展如下:

1.全局变量检测增强  C++检测出重定义
2.函数检测增强  返回值检测、形参类型检测、函数调用参数个数检测
3.类型转换检测增强  类型转换检测更严谨
4.struct增强   C++可以放函数,创建结构体变量,可以简化关键字 struct
5.bool类型扩展  扩展添加bool类型
6.三目运算符增强  返回变量作为左值可被修改
7.const增强  c++下const修饰是真常量,且可以用来初始化数组
8.Const修饰变量的链接性  c 下const修饰全局变量默认是外部链接属性,   c++下const修饰全局变量默认是内部链接属性

http://www.lryc.cn/news/293095.html

相关文章:

  • 【文件上传WAF绕过】<?绕过、.htaccess木马、.php绕过
  • flutter如何实现省市区选择器
  • Python——将Pyaudio的frame音频数据转换成wave格式
  • Vue 上门取件时间组件
  • 学习python第一天
  • interface转string输出打印
  • 如何在PS5上使用金手指修改游戏
  • M1芯片MAC 安装MySQL、Nacos遇到的问题
  • 尝试创建若依系统项目(vue3+element-plus+vite) 持续更新...
  • Pytest测试用例参数化
  • 【Vue】指令之显示切换,属性绑定
  • Z字型遍历二叉树
  • 【Go语言成长之路】安装Go
  • C语言常见面试题:C语言中如何进行图形界面编程?
  • 删除元素(数组)
  • WPF DataTemplate内重写BorderBrush,VisualBrush内数据源绑定提示绑定失败
  • ElasticSearch搜索与分析引擎-Linux离线环境安装教程
  • 网络安全全栈培训笔记(59-服务攻防-中间件安全CVE复现lSApacheTomcataNginx)
  • 操作系统真象还原---系列笔记总结
  • 猫用空气净化器好吗?好用的养猫宠物空气净化器品牌推荐
  • 【计网·湖科大·思科】实验六 IP数据报的发送和转发流程、默认路由和特定主机路由
  • freertos 源码分析一 list链表数据结构
  • 小程序uni-swiper-action-item滑动不了
  • 【新课】安装部署系列Ⅲ—Oracle 19c Data Guard部署之两节点RAC部署实战
  • 【从零开始的rust web开发之路 四】rust语言tokio异步使用redis教程
  • uniapp本地存储的几种方式localStorage
  • 扩展学习|统计学习理论(SLT)与极限学习机(ELM)应用于大社会数据分析
  • 配置实例—交换机VLAN聚合配置实例
  • 网络开发的隐形壁垒:如何巧妙解决跨域难题?
  • 【极简】conda同一个服务器上迁移环境 export / create