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修饰全局变量默认是内部链接属性
相关文章:

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修饰变量的链接性 二、分析总结 一、程序及输出 …...

【文件上传WAF绕过】<?绕过、.htaccess木马、.php绕过
🍬 博主介绍👨🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…...

flutter如何实现省市区选择器
前言 当我们需要用户填写地址时,稳妥的做法是让用户通过“滚轮”来滑动选择省份,市,区,此文采用flutter的第三方库来实现这一功能,比调用高德地图api简单一些。 流程 选择库 这里我选择了一个最近更新且支持中国的…...
Python——将Pyaudio的frame音频数据转换成wave格式
要将pyaudio捕获的音频帧(frame)数据转换成wave模块可以直接处理的格式,通常意味着你需要将这些音频帧数据组装成一个完整的音频流,并确保它们以wave模块期望的格式进行存储。但是,如果你的目的是将这些帧数据直接转换…...

Vue 上门取件时间组件
本文使用vue2.0elementui 制作一个上门取件时间组件,类似顺丰,样式如下: 大概功能:点击期望上门时间,下面出现一个弹框可以选择时间: 首先我们定义一些需要的数据: data() {return {isDropdown…...
学习python第一天
1.输出 print("Hello, World!") 2.退出命令提升符 exit() 3.Python 缩进 实例 if 5 > 2:print("Five is greater than two!") 空格数取决于程序员,但至少需要一个。 您必须在同一代码块中使用相同数量的空格,否则 Python 会…...
interface转string输出打印
文章目录 前言一、interface 转json再转string二、使用类型判断 前言 在开发过程中,有时我们使用interface类型接受某些参数接口或返回类型,但输出时,比如记录日志时存在很多不方便情况,输出string发现输出的乱七八糟,…...

如何在PS5上使用金手指修改游戏
环境:windows PS5 问题:PS5 没有GodHen,无法使用json金手指,PKG金手指比较少 解决办法:使用MultiTrainerv从网络注入PS5,修改进程内存 背景:为了护肝,拒绝刷刷刷 解决过程ÿ…...
M1芯片MAC 安装MySQL、Nacos遇到的问题
摘要:由于电脑上是M1芯片,安装软件时遇到一系列问题,记录下踩的坑!!! 安装MySQL MySQl官网下载链接区分ARM和X86架构,终端输入uname -a指令,本机显示为ARM czhczhdeiMac ~ % uname…...

尝试创建若依系统项目(vue3+element-plus+vite) 持续更新...
若依官网:RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoYi框架|RuoYi开源|RuoYi视频|若依视频|RuoYi开发文档|若依开发文档|Java开源框架|Java|Spri…...

Pytest测试用例参数化
pytest.mark.parametrize(参数名1,参数名2...参数n, [(参数名1_data1,参数名2_data1...参数名n_data1),(参数名1_data2,参数名2_data2...参数名n_data2)]) 场景: 定义一个登录函数test_login,传入参数为name,password,需要用多个账号去测试登录功能 # …...
【Vue】指令之显示切换,属性绑定
Vue指令【2】 显示切换与属性绑定v-show指令v-if指令v-bind指令 显示切换与属性绑定 v-show指令 作用:根据真假切换元素的显示状态 指令后的内容最终都会解析为布尔值数据改变之后,对应元素的显示状态会同步更新 语法: <div id"…...
Z字型遍历二叉树
编码过程 掏出Deque,先写从左往右遍历 class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {Deque<TreeNode> deque new ArrayDeque<>();deque.offer(root);while (!deque.isEmpty()) {int n deque.size();f…...

【Go语言成长之路】安装Go
文章目录 安装Go一、下载Go语言安装包二、删除以前安装的Go版本三、添加/usr/local/go/bin到环境变量内四、确认安装成功 安装Go Note: 这里只演示安装Linux版本的Go,若为其它版本,请按照官网的安装教程进行安装即可。 一、下载Go语言安装包 在浏览…...
C语言常见面试题:C语言中如何进行图形界面编程?
在C语言中进行图形界面编程通常需要借助一些图形库。以下是一些常用的C语言图形库及其使用方法: GTK (GIMP Toolkit): GTK 是一个广泛使用的开源图形库,可用于创建跨平台的桌面应用程序。它提供了一套丰富的控件,如按钮、文本框、…...
删除元素(数组)
题目描述 输入一个递增有序的整型数组A有n个元素,删除下标为i的元素,使其仍保持连续有序。注意,有效下标从0开始。 定义如下两个函数分别实现删除元素操作和数组输出操作。 void del(int a[], int n, int i); /*删除数组a中下标为i的元素*…...
WPF DataTemplate内重写BorderBrush,VisualBrush内数据源绑定提示绑定失败
定义DataTemplate 数据模板文件,内容如下 <DataTemplate x:Key"{DataTemplateKey {x:Type VM:TemplateListVM}}" DataType"{x:Type VM:TemplateListVM}"> <Grid Margin"0" Grid.Row"3" Height"50" Ver…...

ElasticSearch搜索与分析引擎-Linux离线环境安装教程
目录 一、下载安装包 网盘链接: 二、安装流程及遇到的问题和解决方案 (1)JDK安装 (2)Elasticsearch安装 (3)Kibana安装 (4)Ik分词器安装 三、启动过程中的问题 ÿ…...

网络安全全栈培训笔记(59-服务攻防-中间件安全CVE复现lSApacheTomcataNginx)
第59天 服务攻防-中间件安全&CVE复现&lS&Apache&Tomcata&Nginx 知识点: 中间件及框架列表: lIS,Apache,Nginx,Tomcat,Docker,Weblogic,JBoos,WebSphere,Jenkins, GlassFish,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Sprng,Flask,…...
操作系统真象还原---系列笔记总结
闲话 最开始知道这本书是在校内论坛上,有同学通过这本书里的项目拿到大厂的ssp offer,于是就从网上订购了这本较为大部头的书,想要在简历上添加一个足够底层并且有意思的项目经历,从而帮助自己在秋招时赢得一个好的offer。 第一遍…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...

Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
命令行关闭Windows防火墙
命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)方法二:CMD命令…...