c++primer第2章 变量和基本类型

news2024/11/18 7:48:16

文章目录

  • 第2章 变量和基本类型
    • 2.1 基本内置类型
      • 2.1.1 算术类型
      • 2.1.2 类型转换
      • 2.1.3 字面值常量
    • 2.2 变量
      • 2.2.1 变量定义
      • 2.2.2 变量声明与定义的关系
      • 2.2.3 标识符
      • 2.2.4 名字的作用域

  • 第Ⅰ部分 c++基础

    • 语法特征

      • 类型 变量 语句 控制结构 函数
      • 补充:自定义数据类型(语言扩展);功能封装成库函数
    • c++ 静态数据类型语言 类型检查发生在编译时

    • c++类 包含 数据成员 函数成员

第2章 变量和基本类型

  • 数据类型:数据意义 操作

  • 内置类型: 字符 整型 浮点型

2.1 基本内置类型

  • 算术类型(字符 整型 布尔型 浮点型 ) 空类型

2.1.1 算术类型

  • 整型(包括字符和布尔) 浮点型
类型含义最小尺寸
bool布尔类型/
char字符8
wchar_t宽字符16
char16_tUnicode字符16
char32_tUnicode字符32
short短整型16
int整型16
long长整型32
long long长整型64
float单精度浮点型6位有效数字
double双精度浮点型10位有效数字
long double扩展精度浮点型10位有效数字
  • char 空间确保可存放机器基本字符集任意字符对应数字值

  • wchar_t char16_t char32_t 确保可存放机器最大扩展字符集任意字符
     

  • 赋予内存中某地址明确含义需知道存储在地址的数据类型,类型决定数据所占比特数/解释比特内容

  • 浮点型 :单/双/扩展精度浮点型 float 1个字32bit;double 2个字64bit;long double 3/4个字96/128bit

  • 带符号类型 无符号类型
    • (除去 布尔型 扩展字符型)整型可分 带/无符号类型
    • 带符号:正、负、0;无符号:大于0
    • int short long ,long long 均为带符号,加unsigned为无符号;unsigned int 可简写为unsigned
    • 字符型:char(实际上会为后两种的其中一种由编译器决定)、signed char、unsigned char
    • unsigned char可表示0-255区间内的值,signed char表示范围-128-127
  • 如何选择类型
    • 明确值不可能为负时选无符号类型
    • 整数运算用int,超出int范围用long long
    • 算数表达式不使用char/bool
    • 浮点数运算用double(float精度不够/计算代价相差不大)

2.1.2 类型转换

  • 类型所能表示的值得范围决定了转换的过程
    • 非bool->bool: 0->false; other->ture
    • bool->非bool:false->0; ture->1
    • 浮点->整型:仅保留小数点前部分
    • 整型->浮点:小数部分记为0,若超出浮点类型容量则精度可能有损失
    • 给无符号赋超出范围的值->初始值对无符号类型表示数值总数取模后的余数
    • 给带符号类型赋超出表示范围的值,结果为未定义
  • 避免无法预知(编译器无需/不能检测的错误)和依赖于现实环境的行为
  • 含有无符号类型的表达式
    • 负数和无符号数相加,先将负数转换为无符号数类似直接给无符号数赋一个负值,结果等于这个负数加上无符号数的模
    • 从无符号数减去一个值(无论是不是无符号数),须确保结果不能是一个负值
    • 循环中的条件,for不要写无符号数>=0;因为其永远也不会小于0,会导致死循环;改用while(u>0){–u;}
  • 切勿混用带符号类型和无符号类型
    • 带符号数会自动转换为无符号数

2.1.3 字面值常量

  • 整型和浮点型字面值
    • 0开头八进制,0x开头16进制
  • 字符和字符串字面值
    • 单引号字符字面值’a’
    • 双引号字符串字面值"a"(常量字符构成的数组array,编译器在字符串结尾添加’\0’,故长度比内容多一;可以分行书写"hello"“world”)
  • 转义序列
    • 不能直接使用:1. 不可打印;2. 特殊含义字符:单引号 双引号 问号 反斜线
    • 换行 \n 横向制表\t 纵向制表\v 退格\b 双引号" 反斜杠\ 回车\r …
    • 泛化的转义序列 \x后跟一个或多个16进制数字,\后跟1/2/3个八进制数字
  • 指定字面值的类型(前缀(字符和字符串字面值)u,U,L,u8;后缀(整型/浮点型字面值)U,L,LL, F,L)
  • 布尔字面值和指针字面值
    • 布尔:true false ;指针:nullptr

2.2 变量

  • 具名的 可供操作的储存空间;数据类型决定变量所占内存空间大小和布局方式,存储值的范围,能够参与的运算;变量和对象可以互换使用

2.2.1 变量定义

  • 类型说明符 变量名(变量名以逗号分隔 以分号结束)
  • 对象:一块能存储数据并具有某种类型的内存空间
  • 初始值:创建变量时获得的特定值(初始化);初始化不是赋值,赋值:把对象的当前值擦除而以一个新值替代
  • 列表初始化int a=0;int a={0};int a{0};//花括号列表初始化 int a(0);
  • 默认初始化:定义时没指定初值变量被默认初始化;内置类型定义于函数体外初始化为0,定义于函数体内则不被初始化。(建议初始化每一个内置类型变量)

2.2.2 变量声明与定义的关系

  • 分离式编译:将程序分割为若干个文件,每个文件可被独立编译
  • 声明:使名字为程序所知(规定变量的类型和名字)(extern);定义:负责创建与名字关联的实体(规定变量的类型和名字外还申请储存空间/可能为变量赋初始值);任何包含显式初始化的声明即成为定义;函数体内部试图初始化extern关键字标记的变量将引发错误;变量只能被定义一次但可被多次声明
  • c++静态类型语言,编译阶段检查类型

2.2.3 标识符

  • 字母 数字 下划线组成,必须以字母或者下划线开头;长度无限制,大小写敏感
  • 不能被用作标识符:关键字,标准库保留名字(连续两个下划线/下划线紧连大写字母开头),定义在函数体外标识符不能以下划线开头
  • 变量命名规范:
    • 标识符要体现实际含义
    • 变量名一般用小写字母
    • 自定义类名以大写字母开头
    • 标识符由多单词组成,单词间应明显区分(下划线或驼峰)

在这里插入图片描述

2.2.4 名字的作用域

  • c++作用域以花括号分割
  • 名字有效区域:始于名字声明语句,终于声明语句所在作用域末端
  • 全局作用域:定义在函数体外(花括号外);块作用域
  • 建议第一次使用变量时再定义它
  • 嵌套的作用域
    • 内层作用域:被包含(被嵌套)的作用域 (允许内层作用域中重新定义外层作用域已有的名字)
    • 外层作用域:包含着别的作用域的作用域
  • 局部变量正在作用域内(in scope)会覆盖全局变量;域操作符左侧为空如 ::g_cat即为全局作用域对应变量

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

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

相关文章

Elasticsearch:如何减少 Elasticsearch 集群中的分片数量

在我之前的文章 “Elasticsearch:我的 Elasticsearch 集群中应该有多少个分片?” , 它描述了在我们实际操作中的分片数量的准则。在文章 “Elasticsearch:如何部署 Elasticsearch 来满足自己的要求” 讲述了如何部署 Elasticsearc…

Prometheus系列之Grafana 版本9.0.0 设置Email邮件报警实战

目录1. 配置文件conf/defaults.ini修改2. Grafana Web页面配置报警邮箱接收者3. 创建Dashboard4. 创建Alert的文件夹5. 设置Notification policies6. 添加Alert7. Alert Rule测试1. 配置文件conf/defaults.ini修改 将conf/defaults.ini的如下内容 ##########################…

变量提升,函数提升,暂时性死区,详细解析

变量的提升 JavaScript 在执行之前 会进行预解析 函数声明 函数体会被提升到当前作用域顶部 var的声明会提升 并赋值undefined 因为var会有一个变量提升,他的声明初始化会被提升,但是值不会被提升,所以控制台返回undefined 函数提升 这是…

CSS -- CSS3基础动画讲解

文章目录CSS 3动画1 动画的基本使用2 动画序列3 动画常用属性4 动画简写属性5 速度曲线细节CSS 3动画 动画(animation) 是CSS3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画常用来实现复杂的动画效果。 相比较过渡,动画可以实现…

白银票据的原理和使用

白银票据的原理和使用白银票据(Silver Ticket)原理白银票据的使用服务账号是计算机名字$用来管理服务的账号 白银票据(Silver Ticket)原理 白银票据是伪造本该由TGS返回的ST(服务票据),从而访问对应的服务 有server用户的hash就可以伪造出ST,且不经过K…

自重启伪遗传改良算法解决TSP问题(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题、货郎担问题&…

Spark 3.0 - 14.ML 高斯混合聚类理论与实战

目录 一.引言 二.高斯混合模型理论 1.高斯模型 GM 2.高斯混合模型 GMM 三.高斯混合模型实践 1.数据准备 2.模型训练 3.获取多个 GM 四.总结 一.引言 前面提到的 K-means 是发现数据对应簇的硬聚类方法,即分配一个点其固定分配到某个簇,而高斯混…

三方系统集成SF(SuccessFactors),实现单点登录要点

在笔者先前的文章——《基于saml2.0的平台(适用多种平台)单点登录配置,以okta为例》中,详细介绍了如何把一个自开发的三方系统,集成到okta或者IAS平台。 经过笔者的实际工作经验,发现SF自己本身其实也可以…

MCU-51:初识单片机,从点亮一个灯开始

题目一、什么是单片机二、点亮一个LED灯2.1 LED原理和知识2.2 方法一2.3 方法二一、什么是单片机 单片机又称单片微控制器,把一整个计算机系统集成到一个芯片上,当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。一块芯…

文字语义纠错技术探索与实践-张健

背景 文本语义纠错的使用场景非常广泛,基本上只要涉及到写作就有文本纠错的需求。书籍面市前就有独立的校对的环节来保障出版之后不出现明显的问题。在新闻中我们也时不时看到因为文字审核没到位造成大乌龙的情况,包括上市公司在公开文书上把“临时…

并行计算(MPI + OpenMP)

文章目录并行计算MPI(进程级并行)基本结构数据类型点对点通信阻塞非阻塞非连续数据打包聚合通信Communicator & Cartisen GridOpenMP(线程级并行)简介基本制导语句worksharing constructSectionsSingleFor临界区 & 原子操…

React 学习笔记总结(三)

文章目录1. React( v16.8 版本) 生命周期2. React( v16.8 版本) 生命周期 更新流程2.1 三个更新流程2.2 setState()的生命周期流程(对应上图2号线)2.3 forceUpdate()的生命周期流程(对应上图3号线)2.4 父组件render()渲染的生命周期流程(对应上图1号线)2.5 React( v16.8 版本)生…

“学了一个我不感兴趣的专业,要不要转行IT?”

“这个专业太无聊了,我想转行……” “你想转去干什么?” “我对金融感兴趣,听说金融很赚钱,我想学金融……” “你感兴趣为什么课后不去钻研,而要选择打游戏?” “以后再慢慢来嘛……” “可是你已经…

报表工具-FineReport JS实现参数面板显示对应数据

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 -- 1.2 预期效果 1.3 实现思路 对照填报界面的章节,在参数界面也用 SQL 语句实现对应数据的展示 ,当第一次打开模板时,标签不显示可以通过JS 控制实现。 2. 示例 2.1 新建模板 新建普通…

设计模式-牛刀小试01

前言 本文为datawhale2022年12月组队学习《大话设计模式》task4打卡学习,本次完成homework1。 【教程地址】https://github.com/datawhalechina/sweetalk-design-pattern 一、任务描述 1.1 背景 小李已经是一个工作一年的初级工程师了,他所在的公司是…

靶机练习——vulnstack1

下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 注意事项 密码一定要设置为不同的 部署环境 根据红日安全出具的wp,我们只需要设置两个C段即可,分别是外网的72和内网的52,这里直接添加新的网络以及子网地址即可&…

十三、DockerFile构建增强版本centos7

1、概述 在Docker 常用命令篇中,我们已经知道了2中构建镜像的方式 export\import 和 commit方式。这两种方式都需要先运行并创建容器,然后在容器中安装vim、ifconfig等命令,然后再重新构建加强版的镜像,比较麻烦。Dockerfile通过…

2022CTF培训(九)MIPS PWN环境搭建MIPS PWN入门

附件下载链接 环境搭建 在 ARM PWN 环境搭建 的基础上,首先安装具备MIPS交叉编译gcc与MIPS程序动态链接库: sudo apt-get install gcc-mips-linux-gnu sudo apt-get install gcc-mipsel-linux-gnu sudo apt-get install gcc-mips64-linux-gnuabi64 su…

【CANN训练营第三季】Ascend平台体验Pytorch笔记

模型迁移 手册地址:https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/600alpha002/ptmoddevg/ptmigr/ptmigr_000009.html 主要修改: 导入相关库 import torch import torch_npu #1.8.1及以上需要指定NPU设备 通过device()指定 …

JDBC编程步骤、JDBC API详解和数据库连接池

前言: JDBC 就是使用Java语言操作关系型数据库的一套API ,全称:( Java DataBase Connectivity ) Java 数据库连接。官方(sun公司)定义的一套操作所有关系型数据库的规则,即 接口各个数据库厂商去实现这套…