C++ Primer 第2章 变量和基本类型

C++Primer第2章 变量和基本类型 2.1 基本内置类型 C++定义了一套包括算术类型和空类型在内的基本数据类型。 2.1.1 算术类型 算术类型分为两类:整型和浮点型。算术类型的尺寸在不同机器上有所差别。 类型 含义 最小尺寸 常见 bool 布尔类型 未定义 char 字符 8位 wchar_t 宽字符 16位 char16_t Unicode字符 16位 char32_t Unicode字符 32位 short 短整型 16位 int 整型 16位 long 长整型 32位 . 阅读详情

C++ Primer 第2章 变量和基本类型

2.1 基本内置类型

算数类型

bool的最小尺寸未定义
char16_t和char32_t的最小 尺寸分别为16位和32位,含义是Unicode字符,short和int都是16位(-32768~32768),long是32位(-21E~21E),long long是64位。
float是6位有效数字,double是10位有效数字,long double是10位有效数字。

以下是选择类型的一些经验准则:

  • 当明确知晓数值不可能位负时,选用无符号类型。
  • 使用int执行整数运算。在实际应用中,short常常显得太小而long一般和int有一样的尺寸。如果数值超过int的表示范围,选用long long。

  • 在算术表达式中不要使用char或bool,因为类型char在一些机器上是有符号的,一些是没符号的。如果需要使用一个不大的整数,那么明确指定是signed char(-128~127)或者unsigned char(0~255)

  • 执行浮点数运算选用double,这是因为float通常精度不够,而且double和float的计算代价相差无几。对于某些机器来说,甚至double比float更快。long double在一般情况下是没有必要的,况且它带来运行时的消耗也不容忽视。

类型转换

  • 当赋值给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。例如复制给8比特大小的unsigned char可表示0~255区间内的值,如果赋值了一个区间意外的值,则实际结果是对该值对256取模后所得的余数。因此,把-1赋给8比特大小的unsigned char 所得结果是255。
  • 当我们赋值给带符号类型一个超出它表示范围的值时,结果是未定义的(undefined)。
  • 当一个算术表达式中既有无符号数又有int值时,那个int值就会转换成无符号数。(先转换再计算)

字面值常量

十进制字面值的类型是int、long和long long中尺寸最小的那个。
八进制和十六进制字面值的类型是int、unsigned int、long、unsigned long、long long和unsigned long long中的尺寸最小者。
如果一个字面值连与之关联的最大的数据类型都放不下,将产生错误。类型short没有对应的字面值。
尽管整型字面值可以存储在带符号数据类型中,但严格来说,十进制字面值不会是负数,负号并不在字面值之内,它的作用仅仅是对字面值取负数而已。

由单引号括起来的一个字符称为char型字面值,双引号括起来的零个或多个字符则构成字符串型字面值,编译器会在每个字符串的结尾处添加一个空字符’\0’,因此,字符串字面值的实际长度比内容多1。

泛化的转义序列:\x后紧跟1个或多个十六进制数字,或者\后紧跟1个、2个或3个八进制数字,其中数字部分表示的是字符对应的数值。
注意:如果反斜线\后面跟着的八进制数字超过3个,只有前三个数字与\构成转义序列。相反,\x要用到后面跟着的所有数字。


2.2 变量

变量定义

WARNING:初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。
C++11:可用{ }来初始化变量
如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显示的初始化变量。任何包含了显示初始化的声明即称为定义。会抵消extern的作用。

extern int i;           //声明i而非定义i
int j;                  //声明并定义j

变量能且只能被定义一次,但是可以被申请多次。


2.3 复合类型

引用&d(左引用)

引用并非对象,它只是为一个已经存在的对象所起的另外一个名字。引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起。

指针*d

  • 指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。
  • 指针无需在定义时赋值。
int ival = 42;
int *p = &ival;          //p存放变量ival的地址,或者说p是指向变量ival的指针。

因为引用不是对象,没有实际地址,所以不能定义指向引用的指针。
如果指针指向了一个对象,则允许使用解引用符*来访问对象。
C++11:得到空指针最直接的办法就是用字面值nullptr来初始化指针,它可以被转换成任意其他的指针类型。
void* 指针是一种特殊的指针类型,可用于存放任意对象的地址。不能直接操作void*指针所指的对象,因为我们并不知道这个对象到底是什么类型,也就无法确定能在这个对象上做哪些操作。


2.4 const限定符

如果想在多个文件之间共享const对象,必须在变量的定义之前添加extern关键字。
常量引用是对const的引用,引用的对象是常量还是非常量可以决定其能所参与的操作,却无论如何都不会影响到引用和对象的绑定关系本身。
常量引用仅对引用可参与的操作做出了限定,对于引用的对象本身是不是一个常量未作限定。因为对象也可能是个非常量,所以允许通过其他途径改变它的值:

int i = 42;
int &r1 = i;            //引用ri绑定对象i
const int &r2 = i;      //r2也绑定对象i,但是不允许通过r2修改i的值
r1 = 0;                 //r1并非常量,i的值修改为0
r2 = 0;                 //错误:r2是一个常量引用

指针和const

指向常量的指针不能用于改变其所指对象的值,要想存放常量对象的地址,只能使用指向常量的指针:

const double pi = 3.14;
const double *cptr = π

两个例外:
- 允许令一个指向常量的指针指向一个非常量对象:

double dval = 3.14;
cptr = &dval;           //正确:但是不能通过cptr改变dval的值

所谓指向常量的指针仅仅要求不能通过该指针改变对象的值,而没有规定那个对象的值不能通过其他途径改变。
指针本身是一个常量并不意味着不能通过指针修改其所指对象的值,能否这样做完全依赖于所指对象的类型。
把*放在const关键字之前用以说明指针是一个常量,即不变的是指针本身的值而非指向的那个值。
想让指针指向常量,就必须在前面加const,想让指针是常量,就得把*放到const前面

constexpr和常量表达式

常量表达式是指不会改变并且在编译过程就能得到计算结果的表达式。
C++11允许将变量声明位constexpr类型以便由编译器来验证变量的值是否是一个常量表达式。

一般来说,如果你认定变量是一个常量表达式,那么就吧它声明成constexpr类型。

自定义类、IO库、string类型都不是字面值类型,不能被定义成constexpr,一个constexpr指针的初始值必须是nullptr或者0,或者是存储于某个固定地址中的对象。

*在constexpr声明中如果定义了一个指针,限定符constexpr仅对指针有效,与指针所指的对象无关:

const int *p = nullptr;                    //p是一个指向整型常量的指针
constexpr int *q = nullptr;               //q是一个指向整数的常量指针

2.5 处理类型

类型别名

  • typedef double wages;
  • using SI = Sales_item;

auto类型说明符

它能让编译器去分析表达式的类型从而确定变量的类型,一条声明语句只能由一个基本数据类型。
auto一般会忽略掉顶层const,同时底层const则会保留下来。

decltype类型指示符

它的作用是选择 并返回操作数的数据类型,不实际计算表达式的值:
decltype (f()) sum = x;
编译器并不实际调用函数f,而是使用当调用发生时f的返回值类型作为sum的类型。

如果给变量加上了一层或多层括号,编译器就会把它当成是一个表达式。变量是一种可以作为赋值语句左值的特殊表达式,赋值是会产生引用的一类典型表达式,引用的类型就是左值的类型,所以这样的decltype就会得到引用类型,而非变量的类型。

2.6 自定义数据结构

预处理命令:在编译前执行的一段程序,可以部分地改变我们所写的程序。
头文件保护符
#ifdef当且仅当变量已定义时为真
#ifndef当且仅当变量未定义时位真
一旦检测结果位真,则执行后续操作直至遇到#endif为止。

#ifndef SALES_DATA_H
#define SALES_DATA_H
#include <string>
    ...
#endif
馈电网络设计:通过Smith圆图工具完成微带线到同轴探针的阻抗匹配 Smith圆图通过图形化阻抗变换路径,显著简化微带线到同轴探针的匹配设计。设计需结合理论计算(微带线阻抗公式、探针等效模型)、圆图操作(串联/并联元件移动规则)及仿真验证,最终实现宽带低反射匹配。 阅读详情

相关推荐

AI风控系统中的实时决策架构:架构师的关键设计

当用户点击「确认支付」时,一场毫秒级的“欺诈攻防战”正在后台悄然打响:系统需要在100ms内完成用户行为特征提取→欺诈模型推理→规则引擎校验→最终决策返回。这就是AI风控实时决策架构的核心——用技术对抗“实时化的欺诈手段”。本文将以「餐厅智能点餐系统」为类比,拆解实时风控架构的每一层逻辑:从“如何快速拿到用户的实时行为特征”(像服务员实时收集顾客的忌口),到“如何让模型和规则协同决策”(像厨师长结合菜谱和经验判断菜能不能做),再到“如何保证系统扛住大促的高并发”(像餐厅加桌子应对客流高峰)。我们会用。

2502_91592937的博客 1472

Python工具箱系列(五十五)

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。从识别效果来看还是不错的。能够看出,识别的可信度还是非常高的。

Trb401012的博客 475

局部,全局(外部),static等变量详解

首先,必须明白一个程序是包含若干个源文件,每个源文件又是包含若干个函数,每个源文件、函数中又定义了若干个变量。但是每个变量都有自己的作用范围,也就是自己的作用域。只有在作用域内才可以访问变量。 变量的有效范围称为变量的作用域( scope)。归纳起来,变量有4种不同的作用域:文件作用域( file scope)、函数作用域( function scope)、块作用域(block sc...

归根结底不优秀的博客 1322

C++笔记

unsigned int 可以缩写为unsigned 使用int执行整数运算。在实际应用中,short常常显得太小而long一般和int有一样的尺寸。如果你的数值超过了int的表示范围,选用long long 执行浮点数运算选用double,这是因为float通常因为精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几。 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。例如,8比特大小的unsigned char 可以表示0-255区间内的值,如果.

yjplovegn的博客 934

【Unity+HoloLens2】从0开始在HoloLens2部署MR工程

HoloLens2部署的权威教程在微软的官方文档中,但有些问题其实官方文档并没有列出,所以在实际开发过程中如果遇到bug,就需要自身或者前人的经验去解决。比如:对于Hololens2来说,在VS中需选择ARM64而不是x86。部署需要有良好的网速;工程打包出来的文件路径和工程路径有关联,如果这两个路径不匹配,部署就会失败。部署后打不开可能是因为Unity中未添加需要部署的场景,在Build Settings中点击Add open Scenes。...

fmxs 4571

法兰克仿真软件FANUC CNC Guide v25.0 安装教程及中文设置

下载地址在文末。我们公司用新到一批FANUC 系统的设备,为方便使用就装了一个 FANUC 数控系统仿真软件FANUC CNC Guide v25.0 ,还是最新版不是市面上流传的老版本。模拟学习一下。

hakesashou的博客 1万+

python 破解验证码之二:OCR tesseract识别验证码

@TOC OCR tesseract识别验证码 首先,自动生成验证码的code在破解验证码1,如果想要自动生成不想自己一点点保存图片的可以去看 然后是正题,pip3 install tesserocr之前先要安装一个tesseract,这一方面可以百度,但是要小心很多的坑,pip的时候最好有一个镜像,tesserocr你直接在pycharm里安装是进行不下去的,安装了tesseract之后去下载w...

Jayj1997的博客 2118

【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(3):Agent请求和响应

CangjieMagic框架:使用华为仓颉编程语言编写,专门用于开发AI Agent,支持鸿蒙、Windows、macOS、Linux等系统。这篇文章剖析一下 CangjieMagic 框架中的 AgentRequest 和 AgentResponse。

九丘教育官方博客 1475

用Tesseract OCR识别图片文字

用tesseract ocr识别图片中的文字 准备 OCR与Tesseract介绍 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR)。可以实现OCR 的底层库并不多,目前很多库都是使用共同的几个底层OCR 库,或者是在上面进行定制。   Tesseract 是一个OCR 库,目前由Google 赞助(Google 也是一家以O...

Jorwnpay's Blog 3881

电竞护航系统成品搭建俱乐部点单小程序开发三角洲小程序搭建

电竞护航系统成品搭建俱乐部点单小程序开发三角洲小程序搭建

dapengglove的博客 1682

利用大规模生物活性挖掘,计算识别针对癌基因驱动蛋白 EGFR、BRAF 与 CDK4 的高亲和力抑制剂

背景:精准癌症治疗需要小分子抑制剂与致瘤蛋白靶点之间的精确匹配。方法:我们使用 Python 及 ChEMBL 数据库 API 开发了一套计算流程,系统性地筛选针对 EGFR、BRAF 与 CDK4 的高亲和力配体。对 IC50 < 1000 nM 的生物活性进行过滤,并检索候选化合物的分子结构(SMILES)以供后续优化。结果:本研究共识别出 [插入总数] 种独特化合物。其中,对 BRAF 激酶而言,我们挑选了一批 IC50 低至 6.0 nM 的高效实验性化合物。

u012133341的博客 96

处理类型

类型别名 1、关键字typedef: typedef double wages; //wages是double的同义词 typedef wages base, *p; //base是double的同义词, p是double *的同义词 2、新标准方法,别名声明(alias declaration): using UI = usigned int; //UI是usigned int的同义词 指针、常...

qq_39987383的博客 320

使用亚组分析进行子组分析并可视化森林图 - R语言

通过亚组分析和森林图的结合,我们可以更好地理解不同子组之间的差异和效果大小。当然,在实际应用中,还需要考虑多种因素,如样本量、异质性等,以得到更准确的结果和结论。每个森林图中的水平线代表了每个子组的效应估计,线的长度表示了该效应估计的置信区间。假设我们有一个包含研究对象的数据框(data frame),其中包括了治疗组和对照组的结果数据,以及一些可能的影响因素作为调整变量。在本例中,我们将比较两种不同的治疗方法(A和B)对结果变量的影响,并调整了一个额外的变量。是结果变量和对照组变量的列名。

2301_79326857的博客 1235

【c++ primer 笔记】 第2章 变量和基本类型

概述 c ++定义了几种基本的内置类型(如字符、整型、浮点数等),同时提供自动以数据类型的机制。基本内置类型包括算数类型和空类型。算数类型包括字符、整型数、浮点数和布尔值。类型选择概述几种类型转换:取模与取余区别: 含有无符号的整数整型和浮点型字面值 浮点型字面值可以用小数或科学计数法表示,科学计数法中的指数部分用 E 或 e 标识。 字符和字符串字面值 转义序列布尔字面值和指针字面值 🍮2.2 变量 变量 :提供一个具名的、可供程序操作的存储空间 对象 :一块能存储数据并具有某种类型的内存 初始化对.

小呆鸟blog 2209

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

分类内容详情类的定义定义形式以struct或class开始,紧跟着类名和类体,类体由一对花括号包围形成新的作用域,类体右侧的花括号后必须写一个分号,C++新标准规定,可以为数据成员提供一个类内初始值头文件编写作用为确保各个文件中类的定义一致,类通常被定义在头文件中,且头文件的名字应与类名一致保护符使用头文件保护符#ifndef#define和#endif防止重复包含产生的问题。

qq_40844444的博客 861

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【C++Primer】第2章:变量和基本类型

第2章 变量和基本类型 数据类型分无符号和带符号 编译器类型 char short int long float double 指针 32位编译器 1字节 2 4 4 4 8 4 64位编译器 1字节 2 4 8 4 8 8 8比特的signed char范围为-128~127区间 字面值常量 整型和浮点型字面值: 默认整型字面值为double 字符和字符串字面值: 编译器在每个字符串的结尾处添加一个空字符(’\0’),因此,字符串字面值的实际长度比它的内容多1 除了常见的字

zdb 304

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

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

m0_68312479的博客 618

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

2.1 基本内置类型 算术类型(arithmetictype)和空类型(void)在内的基本数据类型。其中算术类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值,仅用于一些特殊的场合,例如最常见的是,当函数不返回任何值时使用空类型作为返回类型。 2.1.1算术类型 算术类型分为两类:整型(integraltype,包括字符和布尔类型在内)和浮点型。算术类型的尺寸(也就是该类型数据所占的比特数)在不同机器上有所差别。表2.1列出了C++标准规定的尺寸的最小值,同时允许编译器赋予这些类型更大的尺寸

CHYabc123456hh的博客 858

【C++ primer】第2章 变量和基本类型

介绍C++基本内置类型和复合类型,const 限定符的使用,C++11标准引入的处理类型,以及使用 struct 关键字自定义类

HPP_优快云的博客 638

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

参考书目:c++ primer第五版,c++ primer习题集 练习2.1 int、long、long long 和short的不同点在于在内存中尺寸不同,即表示的整数的范围不同。c++标准规定每种尺寸的最小值:short占16位,int占16位,long为32位,long long为64位。 无符号类型只能表示0和正数,32位的无符号类型整数能表示[0,232−1][0, 2^{32}-1][0,232−1]的范围,而32为带符号整数能表示[−231,231−1][-2^{31} , 2^{31}-1]

A843151774的博客 917

C++Primer 第2章 变量和基本类型

第二章 2.1 基本类型 C++的基本类型分为空类型和算术类型,空类型就是void,算术类型就是整型,字符型,浮点型,布尔型 char分为,unsigned char,signed char和char,其中char是有符号还是无符号取决于编译器 对于无符号类型,如果赋值超过了其表示范围,则结果为该无符号类型所能表示的数值个数%赋值的数。 unsigned char c = -1; //256%...

大琪子的博客 320

《C++ Primer》导学系列:第 2 章 - 变量和基本类型

本小节介绍C++中的基本内置类型。基本内置类型是构成C++程序的基础,它们用于表示数据的不同形式,如整数、浮点数、字符等。理解和使用这些基本类型是编写C++程序的起点。本节总结了解了C++中的基本内置类型,包括整型和浮点型。学习了类型转换的概念和具体用法,包括隐式转换和显式转换。提高建议多练习基本类型的使用:通过编写各种小程序,熟悉不同基本类型的定义和操作。深入理解类型转换:特别是C++风格的显式转换,通过实际应用加深理解。

iShare_Carlos的博客 1295

C++Primer 第2章变量和基本类型

C++primer

yang_pi_pi的博客 309

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

2.变量和基本类型 2.1基本内置类型 2.1.1算数类型 算数类型: 整形(字符型,布尔型) 浮点型 算数类型尺寸: 该数据类型所占的比特数 类型 含义 最小尺寸 值 bool 布尔类型 未定义 真(true)或(false) char

hq2116的博客 509

C++ Primer 第五版 学习总结(二)第2章 变量和基本类型

变量定义的基本形式:类型说明符(type specifier)后紧跟由一个或多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束。定义时可以为一个或多个变量赋初始值(初始化,initialization)。初始化不等于赋值(assignment)。初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,再用一个新值来替代。用花括号初始化变量称为列表初始化(list initialization)。

cf18862344377的博客 527

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

2.1基本内置类型    1.算数类型分为两类:整型(包括字符和布尔类型)和浮点型。    2.不同类型有不同的尺寸:       bool           8位       char           16        short          16        int             16        long          32        longlong  ...

xiaoshuaisdl的博客 260
上一篇: Day4 自定义控件/ListView/RecyclerView
下一篇: C++ Primer 第3章 字符串、向量和数组
EnergyOverflow
博客等级 码龄10年 1粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值