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

本文详细介绍了C++编程语言的基本数据类型、类型检查、内存管理、变量初始化以及预处理和标识符的相关规则。强调了C++在编译时进行类型检查的特点,讨论了不同数据类型的尺寸和浮点数精度。同时,提到了引用、指针和const关键字的使用,以及编译器如何处理不同类型字面值。此外,还提及了分离式编译、extern关键字和头文件保护的重要性。
摘要由CSDN通过智能技术生成

C++:静态数据类型语言,类型检查在编译时发生–>编译器必须知道每一个变量对应的数据类型
SmallTalk和python:在程序运行时检查数据类型

C++标准规定的算术类型最小尺寸在这里插入图片描述

char:支持国际化,一个char的空间确保可以存放机器基本字符集中任意字符对应的值,
–>一个机器字节要至少能容纳机器基本字符集中的字符
带_t的:用于扩展字符集,大小确保可以存放机器最大扩展字符集中的任意一个字符
类型char16_t和char32_t为Unicode字符集服务
short<=int<=long <=long long(long long 是C++ 11中定义的
long一般和int有一样的尺寸,超过int的话就用long long 吧

通常,float一个字表示,double两个字,long double 3或4个字
float 7个有效位,double16个有效位
long double 常用于有特殊浮点需求的硬件,具体实现不同则精度也不同
类型char会表现为带符号的或无符号的,具体由编译器决定(所以算术表达式不要用char或bool
执行浮点运算用double,计算代价与float差不多
long double一般没必要,而且会带来很高的运行时消耗

C++约定了带符号类型的正负值应该平衡,为-127~127
大多数计算机实现的具体范围为-128~127

unsigned char c=-1,若char占8比特,则c的值为255
signed char c2=256,若char占8比特,则c2未定义
当给带符号类型一个超出他表示范围的值时,结果未定义
无符号数减去一个值,结果不可能是一个负值

整型字面值的具体数据类型:默认情况下十进制字面值是带符号数,八进制和十六进制可能带符号也可能不带符号,在容纳得下当前值的情况下选尺寸最小者,如果连与之关联的最大数据类型也放不下,就会产生错误,类型short没有相应的字面值
十进制字面值不会是复制,形如-10中的负号不在字面值内,其作用仅仅是对字面值取负
默认情况下浮点字面值是double

C++语言规定的转义序列
在这里插入图片描述

泛化的转义序列:\x后跟1多个十六进制数字,\后跟13个八进制数字,其中数字是字符对应的数值

指定字面值类型的类型
在这里插入图片描述

初始化:创建对象时赋予其初始值
赋值:将对象的当前值擦除,然后用一个新值进行替代

列表初始化时,若初始值存在丢失信息的风险,则编译器会报错
默认初始化:定义变量时没有指定初值
若是内置类型,函数体外未被初始化,则值为0,函数体内未被初始化,则值未定义,不能拷贝或访问其值
C++支持分离式编译:将程序分割成若干个文件,每个文件可被独立编译
extern:用于声明变量,若显式初始化变量则失效变为定义
(函数体内初始化extern变量会引发错误

标识符:字母或下划线开头,长度无限制,不能出现连续两个下划线,不能下划线接大写字母,定义在函数体外的标识符不能以下划线开头
显式访问全局作用于的变量用::
引用必须初始化且不可重新绑定,引用本身不是一个对象,不能定义引用的引用,也不能定义指向引用的指针
块作用域定义的指针若是没有初始化,将拥有一个不确定的值

NULL:预处理变量,在cstdlib中定义,其值为0
不能把int的值赋给指针
不能直接操作void*指针所指的对象
const对象必须初始化
编译器在编译过程中会把const变量替换为相应的值
默认情况下,const对象被设定为仅在文件中有效
初始值不是常量表达式,但却要再多个文件中共享的const变量就在声明和定义处都加extern

constexpr:用于让编译器验证变量的值是否为一个常量表达式
constexpr指针的初始值必须是nullptr,0,或者是存放在固定地址中的对象
函数体内的普通变量不是存放在固定地址中的,因此constexpr指针不能指向这样的对象
定义于所有函数体之外的对象其地址固定不变,可用于初始化constexpr指针(static变量也是
constexpr把它定义的对象置为顶层const,constexpr既可以指向常量,也可以指向非常量

auto让编译器通过初始值来推算变量的类型,并用该值来初始化变量,所以auto定义的变量必须有初始值
auto在一条语句中声明多个变量时,初始基本数据类型必须一致
auto一个引用,结果为引用对象的类型
auto忽略顶层const,保留底层const
使auto为顶层const,需要显示添加const
使auto本身为一个引用,也要显示添加&

decltype:推断表达式的类型,但不实际计算表达式的值,更不用值去初始化变量
decltype保留顶层const和引用
decltype((variable))结果是一个引用,必须初始化
decltype(variable+0)结果是一个基本类型,可以不初始化

可以为类的数据成员提供类内初始值,用于初始化,没有类内初始值的将被默认初始化
类内初始值不能使用圆括号
#define 把一个名字设定为预处理器变量
预处理变量和头文件保护符必须唯一,要给头文件添加头文件保护符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烂人王

求求了 赏我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值