1.引用refrence

定义:给对象起另外一个名字。

1.1 是两个类型一样的对象之间的:

eg.

int  &i = 10;//错误double &f = i;//错误
引申:上面的代码编译后的代码等同于
const double temp  = i;
double &f = temp;//而temp是一个临时变量,用户都不知道它,因此没有实际意义

1.2 常量的const初始化可以是表达式

int i = 0;
const int &r2 = 42;
const int &r3 = r1 * 2;

1.3 非常量引用和常量引用是不同的

int &r4 = r2;//error

1.4 指向指针的引用

int i = 42;
int *p;
int *&r = p;//r是一个引用,引用的是一个指针( 从右往左读)
r= &i; //令p指向i
*r = 0; //i的值为0

2. const

定义:const表示一个变量的值不能更改(所以它必须初始化)

int i = 0;
const  int ci = i;//用对象初始化

2.1 当多个文件定义了同名的const变量,等同于在不同文件中分别定义了独立的变量。
如果多个文件要共享同一个const变量,则可以利用extern关键字

2.1 const的引用

定义:把引用绑定到const对象上。
eg,

const int ci = 1024;
const int &r1 = ci;

2.2 对const的引用,引用的可以是一个非const的对象(会被别人改变)

int i = 0;
int &r1 = i;
const int &r2 = i;
r1 = 0;//i的值被修改为0

2.3 指针和const

可以令指针指向常量,"指向常量的指针"不能用于改变其所指向对象的值。

const double pi = 3.14;
const double *cptr = π//OK
double *ptr = π//error,ptr是一个普通指针
*cptr = 42;//error:不能给*cptr赋值

2.4 const指针
定义:一个const变量(不能改变),它是一个指向某种类型的指针

int i  = 0;
int *const cptr = &i;
const int ci = 0;
const int *const ccptr = &ci;//一个指向常量对象的常量指针
*ccptr = 1;//error

顶层const:右边的const表示指针本身是const
底层const:左边的const表示指针所指向的对象是一个常量

2.5
const int&可以绑定到一个普通的int上
const int* 可以绑定到一个普通的int*上

int i =0;
const int ci = 0;
const int *p2 = &ci;const int &r2 = i;
p2 = &i;

参考

[1]: 代码 https://github.com/thefistlei/cplusprimer/tree/main/cprimer

C++ Primer 5th笔记(2)chapter 2变量和基本类型:引用、const相关推荐

  1. C++ Primer 5th笔记(2)chapter 2变量和基本类型:constexpr 、auto、类型别名、decltype

    1.constexpr和常量表达式 1.1 常量表达式 定义:变量的值在编译器的时候就可以得到是一个常量 eg. const int i = 0; 1.2 constexpr变量 让编译器来验证变量的 ...

  2. C++ Primer 5th笔记(2)chapter 2变量和基本类型:变量声明、关键字

    0. 几个零星知识点 . 嵌套作用域:局部变量会覆盖全局变量 . char 在有些机器有符号,有的无符号. . 标识符大小写敏感. 1.变量声明和定义 c++ 将声明和定义分开来. 声明 extern ...

  3. c++ primer 5th 笔记:第二章

    第二章:变量和基本类型 笔记: 1. c++语言规定一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大.其中,数据类型long l ...

  4. C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参推断和引用

    template < typename T> void f (T &p) 函数参数p是一个模板类型参数T的引用, 编译器会应用正常的引用绑定规则: const 是底层的, 不是顶层 ...

  5. C++ Primer 5th笔记(5)chapter5 语句

    1. for语句的多重定义 初始化那里的所有变量的基础类型必须相同 for(decltype(v.size())) i = 0, sz= v.size();

  6. C++ primer 5th笔记

    目录2022年11月25日 周五 阴 第一.二章:变量和基本类型 基本内置类型 unsigned float与double 'A'与"A" 布尔类型转换时 初始化与赋值 初始化 声 ...

  7. c++ primer 5th 笔记

    第1章 开始 本章以一个实际问题,书店问题,来简单的介绍C的基本特性.这个问题的代码将贯彻整本书,后面的章节会逐一讲解代码中涉及到的 C 语言特性. 这个问题具体,就是要保存书店的所有销售记录的档案, ...

  8. C++ Primer 5th笔记(2)chapter 2变量和基本类型

    1. c++标准规定的算术类型的尺寸 类型名称 类型定义 类型长度 wchat_t 宽字符 16 char16_t unicode字符 16 char32_t unicode字符 32 short 短 ...

  9. C++ Primer 5th笔记(1)chapter 1

    1. 文件重定向 定义:指定std::cin 和std::out的输入文件和输出文件 用法: xx.exe < infileName >outfileName eg: #include & ...

最新文章

  1. TCP 网络应用程序开发流程
  2. 利用windows 2003 实现×××服务器的组建与架构(一) 移动用户到站点之间的×××...
  3. 理论基础 —— 排序 —— 直接插入排序
  4. 每日小记 2017.2.14
  5. 团队编程项目作业1-成员简介及分工
  6. 内存之私有sql区和共享sql区
  7. 【图像融合】基于matlab curvelet变换图像融合【含Matlab源码 776期】
  8. 蓝桥杯2018国赛B组第四题 调手表
  9. android apk 微信登入_图文详解Android集成微信登录的步骤
  10. 5x2cv配对t检验(5x2cv paired t test)
  11. ZooKeeper应用——解决分布式系统单点故障
  12. 剪不断理还乱的前端和交互
  13. 文献管理软件zotero发布ios版本,支持webdav同步并且内置pdf阅读器
  14. Dataframe的创建
  15. 01 - Python 起源
  16. Telegram公布个人身份验证工具,可共享财务及ICO数据
  17. 萧乾升:4.14黄金,白银TD,纸白银,最新行情分析
  18. 一路问情热门论坛自动灌水机 v2007 免费
  19. NetBIOS主机名扫描工具nbtscan
  20. 5种jQuery美化下拉菜单列表插件

热门文章

  1. Java 洛谷 提交完题目的代码之后一直停留在 ( 正在等待编译……),刷新页面之后 ,显示 Unaccepted 0分
  2. java队列转集合_Java集合 使用Queue
  3. 致:测试工程师们!超2000种连接件,下载96页完整选型目录!
  4. 数据中心自动化及其优势
  5. 苹果原壁纸高清_苹果壁纸 | 高清图片全面屏壁纸
  6. php防止模拟请求,php防止伪造跨站请求实现程序_PHP教程
  7. 成功解决ValueError: (‘Unknown transform primitive years. ‘, ‘Call ft.primitives.list_primitives() to get
  8. Dataset之MapillaryVistas:MapillaryVistas数据集的简介、下载、使用方法之详细攻略
  9. Matlab:成功解决Expression or statements is incorrect--possibly unbalanced (,{,[.
  10. 成功解决 bs4\__init__.py:219: UserWarning: b'.' looks like a filename, not markup. You should probably