C++语法复习笔记-3. C语言陷阱与C++改进

news2024/12/28 3:14:43

文章目录

  • 1.C语言常见语法问题
    • 1. 字符问题
    • 2.c语言的考虑
    • 3.C++的思考
  • 2.C语言指针和数组问题
    • 1.问题表现
      • 传入参数会退化为指针
    • 2.问题原因
    • 3.C++解决方案
      • 处理二维数组
  • 3. c语言移位问题
    • 1.问题表现
      • 逻辑右移还是算术右移
      • 移位操作位数的限制
    • 2.问题原因
    • 3.C++中的解决方案
  • 4. C语言强制类型转换问题
    • 1. 问题表现
      • 表现1:siezeOf()无符号
      • 表现2:转换后精度问题
    • 2. 问题原因
    • 3. C++中的解决方案
  • 5. C语言整数溢出问题
    • 1. 问题表现
    • 2. 问题原因
    • 3. 解决策略
  • 6. C语言字符串问题
    • 1. 问题表现
    • 2. 问题原因
    • 3. C++中的解决方案
      • c++字符串标准库的实现
      • redis开源库的实现
        • 记录字符串长度
        • 拼接字符串
  • 小结

慕课网

1.C语言常见语法问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1. 字符问题

在这里插入图片描述
在这里插入图片描述

2.c语言的考虑

在这里插入图片描述

3.C++的思考

在这里插入图片描述
在这里插入图片描述

2.C语言指针和数组问题

1.问题表现

在这里插入图片描述

传入参数会退化为指针

在这里插入图片描述

  • 解决方案
    在这里插入图片描述

2.问题原因

在这里插入图片描述

3.C++解决方案

在这里插入图片描述
在这里插入图片描述

处理二维数组

在这里插入图片描述
在这里插入图片描述

3. c语言移位问题

1.问题表现

逻辑右移还是算术右移

在这里插入图片描述

在这里插入图片描述

  • 都采用无符号,均采用逻辑右移
    在这里插入图片描述

移位操作位数的限制

在这里插入图片描述

2.问题原因

在这里插入图片描述

3.C++中的解决方案

在这里插入图片描述
在这里插入图片描述

4. C语言强制类型转换问题

1. 问题表现

在这里插入图片描述

表现1:siezeOf()无符号

在这里插入图片描述

  • 默认int是有符号值,
  • sizeof() 函数的结果是无符号值,比较时,会自动类型转为无符号的变量

在这里插入图片描述

  • 解决措施-尽量避免无符号整数进行比较,先将无符号的整数转为有符号整数
    在这里插入图片描述

表现2:转换后精度问题

在这里插入图片描述
在这里插入图片描述

  • 解决:整型先转为浮点型,不会丢失精度
  • 即,容量小的向上转型,不会丢失精度,反之会
    在这里插入图片描述

2. 问题原因

在这里插入图片描述

3. C++中的解决方案

在这里插入图片描述
在这里插入图片描述

5. C语言整数溢出问题

1. 问题表现

在这里插入图片描述

  • 最大数位2^31 -1即7fff ffff,是8000 0000 -1的结果
  • 最小数为-2^31,即16进制为8000 0000
    在这里插入图片描述
  • 示例1:循环超过整型范围
    在这里插入图片描述
  • 示例2:运算时边界越界
    在这里插入图片描述

2. 问题原因

在这里插入图片描述

3. 解决策略

  • C语言可以使用字符串等大数运算库
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
	// boost version
	cpp_int ba = 500;
	int bb = 400;
	int bc = 300;
	int bd = 200;
	cout << ba * bb * bc * bd << endl;

在这里插入图片描述

6. C语言字符串问题

1. 问题表现

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 问题原因

在这里插入图片描述

3. C++中的解决方案

c++字符串标准库的实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

redis开源库的实现

记录字符串长度

  • 空间换时间,记录长度
  • 在编译期根据长度数据类型,记录长度
    在这里插入图片描述

拼接字符串

  • C语言实现
    在这里插入图片描述
  • Redis实现
  • 长度的维护,更加安全
  • 操作二进制位,可以处理\0的问题
    在这里插入图片描述

小结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea如何设置通过鼠标去改变字体的大小,idea如何进行作者署名以及时间显示

目录 一、idea如何设置通过鼠标去改变字体的大小 步骤&#xff1a; 1、缩小字体 2、放大字体 二、idea如何进行作者署名以及时间显示 步骤: 一、idea如何设置通过鼠标去改变字体的大小 步骤&#xff1a; 1、缩小字体 设置settings——>键盘设置keymap——>缩小字…

使用 cat 查看创建的软链接文件,出现 cat: 文件: 符号连接的层数过多

今天在使用 cat 查看创建的软链接文件时&#xff0c;出现了这样一个问题&#xff1a; 出现过程&#xff1a; 1、首先&#xff0c;在当前 home 目录下我有一个 2.txt 文件和 test 文件夹 &#xff1b; [wqlocalhost ~]$ ls 1.txt 2.txt Desktop Documents Downloads Musi…

如何将网站全部变成灰色的素装效果,瞧过来

最近&#xff0c;我们看到各个网站、app的页面全部变成了灰色或者黑白色。对于我们需要悼念的日子&#xff0c;使用这种素装&#xff0c;以表示我们对逝者或者英雄的悼念与缅怀&#xff01; 我们看到这种全站的内容全部为灰色&#xff0c;是不是很好奇呢&#xff1f;图片、按钮…

【香橙派4B】1、重刷系统

目录 准备材料 准备软件 准备系统镜像文件 下载镜像 解压镜像包 烧录镜像到SD卡 格式化SD卡 烧录镜像 SD卡烧录镜像到香橙派4B 买回来的香橙派4B&#xff0c;刚上电是安卓的系统&#xff0c;无法进行开发&#xff0c;所以需要进行重装系统。 准备材料 闪迪官方的SD卡&…

图例legend语法及设置

(1)设置图例位置 使用loc参数 plt.legend(loc‘lower left’) 0‘best’1‘upper right’2‘upper left’3‘lower left’4‘lower right’5‘right’6‘center left’7‘center right’8‘lower center’9‘upper center’10‘center’ (2)设置图例字体 #设置字体大小 fontsi…

项目看板开发经验分享(二)——事业部能源监控看板(进度条拟柱状图图表、圆柱形柱状图、图表左右滚动进度条、导航轮播按钮)

系列第二篇&#xff0c;话不多说&#xff0c;直接进入正题 事业部能源监控看板展示视频1、进度条组件 因为整个看板有四处地方用到&#xff0c;结合上一期提到的内容&#xff0c;我们优先考虑将这个模块做成组件 UED给的样式用echarts会很麻烦&#xff0c;我们优先考虑用eleme…

活体识别2: 综述类资源收集

说明 我自己不算专业的算法工程师&#xff0c;只是兼做一些算法的事。接触活体识别这个领域有些摸不清门路&#xff0c;所以网上有些综述类的文章和论文对我来说很重要&#xff0c;让我在对这个领域的知识脉络一无所知的时候有个大概的感性认识。 我这里罗列下我感觉不错的文…

互联网正在化有形为无形,这是一场深刻而又彻底的嬗变

如果放在几年前&#xff0c;你是万万无法想到互联网会蜕变成今天这样一副模样。尽管如此&#xff0c;这样一种蜕变却在真实地发生着。不知道你有没有发现就连前两年火爆的短视频人们都懒得刷了。所有的这一切都在告诉我们&#xff0c;互联网正在发生一场深刻而又彻底的嬗变。如…

【ML入门】anaconda环境搭建

【ML入门】anaconda环境搭建 一、安装anaconda anaconda简介 直接安装python不是更快吗&#xff0c;为什么使用anaconda&#xff1f; 可以理解anaconda是一个大容器&#xff08;类似docker&#xff09;&#xff0c;里面可以建立多个python虚拟环境&#xff0c;对于不同的工…

harbor不停机更换自定义证书

1、问题起源 今天在使用docker推镜像提示证书问题&#xff0c;查看是harbor的自签名证书过期了&#xff0c;报错如下 由于harbor是使用helm部署&#xff0c;以容器方式运行在k8s集群中&#xff0c;无法直接修改证书信息&#xff0c;需要通过更新secret更新证书 2、生成自签名…

论文投稿指南——中文核心期刊推荐(食品工业)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

云计算|OpenStack|社区版OpenStack安装部署文档(二---OpenStack运行环境搭建)

前言&#xff1a; 一个良好的运行环境对于任何一个部署工作来说都是必须的&#xff0c;俗话说 万事开头难&#xff0c;其实很多部署工作失败的原因在于初始环境没有正确的配置&#xff0c;因此&#xff0c;按照官网的部署文档并结合自己的实际情况&#xff0c;配置一个合理的O…

JavaScript对象~

String对象&#xff1a; 它是 JavaScript 的一种基本的数据类型 String 对象的 length 属性声明了该字符串中的字符数&#xff0c;String 类定义了大量操作字符串的方法&#xff0c;例如从字符串中提取字符或子串&#xff0c;或者检索字符或子串 需要注意的是&#xff0c;Ja…

Java图形化界面---进度条

目录 一、进度条的介绍 二、创建进度条 三、简单案例 四、子线程创建进度条 &#xff08;1&#xff09;为什么要使用子线程创建进度条 &#xff08;2&#xff09;子线程创建进度条的代码 五、创建进度对话框 &#xff08;1&#xff09;如何创建进度对话框 &#xff08;2&…

win32Openssl -1_1_1下载安装与使用

1、下载 https://mp.csdn.net/mp_blog/creation/editor?spm1001.2014.3001.5352 此处我下载的版本是&#xff1a; 2、安装 双击安装&#xff0c;可以自定义安装路径。我的安装路径是&#xff1a;D:\openssl1\OpenSSL-Win32 3、VS2022中使用 使用场景&#xff1a;计算MD5校…

shiro拦截axios请求导致@RequireRole注解失效

文章目录ShiroRequiresRole注解对于axios请求无效场景再现解决方案网上的解决方案最近在整理一个自己以前做过的系统&#xff0c;想要添加一些功能&#xff0c;发现shiro框架出现了点问题&#xff0c;觉得这个错误应该还是蛮有价值的&#xff0c;就写出来和大家分享下… ShiroR…

PostgreSQL11 | 数据类型和运算符

上一篇文章整理并拓展了原书《PostgreSql11从入门到精通》第四章的内容&#xff0c;详细讲述了有关数据库表的创建、修改与删表 PostgreSQL11 | pgsql建表、改表与删表http://t.csdn.cn/ojgCl这一篇整理并拓展原书第五章&#xff08;书第73页起&#xff09;的内容。 数据类型和…

【C++】从0到1入门C++编程学习笔记 - 提高编程篇:模板

文章目录一、模板的概念二、函数模板2.1 函数模板语法2.2 函数模板注意事项2.3 函数模板案例2.4 普通函数与函数模板的区别2.5 普通函数与函数模板的调用规则2.6 模板的局限性三、类模板3.1 类模板语法3.2 类模板与函数模板区别3.3 类模板中成员函数创建时机3.4 类模板对象做函…

【Linux】编辑器——vim的使用

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;vim的基本概念vim是什么&#xff1f;vim是一款多模式的编辑器&#xff0c;是vi的升级版本&#xff0c;在兼容vi指令的同时&#xff0c;还带有一些新的特…

Linux主机下连接远程postgresql数据库、容器版postgresql数据库

背景 简单啰嗦一下背景&#xff0c;想看解决方案的&#xff0c;直接跳过本章节。 最近在预研postgresql的功能&#xff0c;其中有个场景就是需要在系统中ssh到postgresql集群上执行psql命令。但是我只有容器版的postgresql&#xff0c;并不能直接ssh到容器中。而ssh到我自己的…