栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ Primer 学习记录(第二章)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ Primer 学习记录(第二章)

文章目录
  • 第二章 变量和基本类型
    • 1 int转换成unsigned
      • 1.1 原码,反码,补码
      • 1.2 int 数据存储
      • 1.3 数据转换
    • 2 变量声明和定义的关系
    • 3 引用和指针
      • 3.1 引用
      • 3.2 指针
        • 3.2.1 获取对象的地址
      • 3.3 指针和引用的不同
    • 4 const限定符
      • 4.1对const的引用
      • 4.2 指向常量的指针
      • 4.3 顶层const和底层const
      • 4.4 constexpr变量
    • 5 处理类型
      • 5.1 auto 类型说明符
      • 5.2 decltype 类型提示符

第二章 变量和基本类型 1 int转换成unsigned 1.1 原码,反码,补码

原码:正数的原码为其二进制表示;负数的原码为其绝对值的二进制表示,并将最高位置为1,表示其符号。

反码:正数的反码与原码相同;负数的反码为其原码除符号位外,其他位按位取反。

补码:正数的补码与原码相同;负数的补码为其反码+1。

1.2 int 数据存储

在存储int型数据时,按照原始数据的补码存储。由于最高位是符号位,因此int所能表示数据的范围应为 -2^31 ~ 2^31-1 。例如:

存储int型1时,记录的为:0000 0000 0000 0000 0000 0000 0000 0001
存储int型-1时,记录的为:1111 1111 1111 1111 1111 1111 1111 1111
1.3 数据转换

int型转换为unsigned int型其实就是把int型的31位和表示符号的最高位,一起看作是unsigned int型的32位一并读取,例如:

int型1:0000 0000 0000 0000 0000 0000 0000 0001,按unsigned的32位读法仍然为1
int型-1:1111 1111 1111 1111 1111 1111 1111 1111,按unsigned的32位读法为 2^32-1 = 4294967295

正数转换为unsigned时,数值与原来相等;负数转换为unsigned时,数值会发生变化。

2 变量声明和定义的关系

声明:使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明;

定义:负责创建与名字关联的实体 (notes:定义会申请存储空间)

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

在函数体内部,如果试图初始化一个由extern关键字标记的变量,将引发错误

3 引用和指针 3.1 引用

引用并非对象,它只是为一个已经存在的对象所起的另外一个名字,引用必须被初始化

定义引用时,程序将引用和它的初始值绑定在一起,对其进行的所有操作都是在与之绑定的对象上进行的

引用类型的初始值必须是一个对象

int &a = 100 (错误,引用类型的初始值必须是一个对象)
3.2 指针 3.2.1 获取对象的地址

指针存放某个对象的地址,要想获取该地址,需要使用取地址符 (&)

3.2.2 指向指针的引用

引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象,所以存在指针的引用

int *p;  int *&r = p;//r是对指针p的一个引用
3.3 指针和引用的不同

指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象;指针无需在定义时赋初值,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值

4 const限定符

const对象一旦创建后其值不能再改变,所以const对象必须初始化

默认状态下const对象仅在文件内有效,如果想在多个文件之间共享const对象,必须在变量的定义之前加上extern关键字

4.1对const的引用
double dval = 3.14;
const int &ri = dval;

此处为了让ri绑定一个整数,编译器将上述代码变成了如下代码

const int temp = dval;//由双精度浮点数生成一个临时的整型变量
const int &ri = temp;//让ri绑定这个临时量

如果ri不是常量,就允许对ri赋值,这样就会改变ri所引用对象的值,而此时绑定的对象是一个临时量而非dval。所以改变的是temp的值而不是dval的值;

4.2 指向常量的指针

指向常量的指针没有规定所指对象必须是一个常量,仅仅要求不能通过该指针改变对象的值,而没有规定那个对象的值不能通过其他途径改变;

const指针

常量指针必须初始化,而且一旦初始化完成,则它的值(也就是存放在指针中的那个地址)就不能再改变了

4.3 顶层const和底层const

顶层const表示指针本身是个常量;底层const表示所指的对象是个常量;

int i = 0;
int *const p1 = &i;//不能改变p1的值,这是一个顶层const
const int ci = 42;
const int *p2 = &ci;//允许改变p2的值,这是一个底层const
const int *const p3 = p2;//靠右的const是顶层const,靠左的是底层const
const int &r = ci; //用于声明引用的const都是底层const

当执行对象的拷贝操作时,顶层const不受影响,而底层const 拷入和拷出的对象必须具有相同的底层const资格,或者两个对象的数据类型必须能够转换

int *p = p3;//错误:p3包含底层const的定义,而p没有
4.4 constexpr变量

C++11新标准规定,允许将变量声明为constexpr类型以便编译器来验证变量的值是否是一个常量表达式。声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化。

5 处理类型 5.1 auto 类型说明符

auto让编译器通过初始值来推算变量的类型,auto定义的变量必须有初始值;

auto也能在一条语句中声明多个变量,但该语句中所有变量的初始数据类型都必须一样

5.2 decltype 类型提示符

它的作用是选择并返回操作数的数据类型;

decltype((var))的结果永远是引用,而decltype(var)结果只有当var本身就是一个引用时,才是引用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913257.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号