C++Primer快速浏览笔记-复合类型
C++Primer2.3节介绍了两种复合类型:引用和指针
1.引用
- 引用并非对象,它只是为一个已经存在的对象所起的别名。
- 一旦初始化完成,引用将和它的初始值对象一直绑定在一起,不能重新绑定到另一个对象,因此引用必须初始化。
- 定义引用时,程序把引用和它的初始值绑定到一起,而不是将初始值拷贝给引用。
- 引用本身不是一个对象,所以不能定义引用的引用
- 引用只能绑定在对象上,而不能与字面值或者某个表达式的结果绑定在一起。
- 引用的类型必须和与之绑定的对象的类型严格匹配。但是有两种例外情况:
1.初始化常量引用时允许用字面值或任意表达式作为初始值,只要该表达式的结果能通过类型转换成引用的类型即可。
2.可以将基类的引用绑定到派生类对象上。举几个例子:
int &refVal4 = 10; // 错误:引用类型的初始值必须是一个对象double dval = 3.14;int &refVal5 = dval; // 错误:此处引用类型的初始值必须是int型对象int i = 42;const int &r1 = i; // 允许将const int&绑定到一个普通int对象const int &r2 = 42; // 正确:r2是一个常量引用const int &r3 = r1 * 2; // 正确:r3是一个常量引用int &r4 = r * 2; // 错误:r4是一个普通的非常量引用
2.指针
指针也能实现对其他对象的间接访问。与引用不同的是。
- 指针本身就是一个对象,允许对指针赋值和拷贝,在其生命周期内可以先后指向几个不同的对象。
- 指针无须在定义时赋初值。
获取对象的地址
指针存放某个对象的地址,使用取地址符获取地址:int ival = 42;int *p = &ival;
指针值
指针的值(即地址)应属下列4种状态之一:
- 指向一个对象。
- 指向紧邻对象所占空间的下一个位置。
- 空指针,未指向任何对象。
- 无效指针。
利用指针访问对象
如果指针指向了一个对象(需要是有效指针),则可以使用解引用符*来访问该对象。可以对其进行赋值等操作。
空指针
空指针不指向任何对象,在试图使用一个指针前代码可以首先检查它是否为空。生成空指针的方法:
int *p1 = nullptr; // 等价于int *p1 = 0;
c++11新标准,建议使用
int *p2 = 0; // 直接p2初始化为字面常量0// 首先#include cstdlibint *p3 = NULL; // 等价于 int *p3 = 0;
直接把值为0的int 变量赋给指针是错误的操作int zero = 0;pi = zero; // _error: cannot assign an int to a pointer_
C++Primer快速浏览笔记-复合类型的更多相关文章
- C++Primer快速浏览笔记-类型转换
bool b = 42; // _b is true_ int i = b; // _i has value 1_ i = 3.14; // _i has value 3_ double pi = i ...
- C++ Primer Plus 第四章 复合类型 学习笔记
第四章 复合类型 1. 数组概述 1.1 数组的定义 数组(array)是一种数据格式,能够存储多个同类型的值.每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素. 数组声明的三 ...
- 《C++ Primer Plus》读书笔记之二—复合类型
二.第四章 复合类型 1.C-风格字符串:C-风格字符串具有一种特殊的性质:以空字符结尾,空字符被写成\0,其ASC||编码为0,用来标记字符串的结尾.例如: char dog[5]={'b','e ...
- C++ primer plus读书笔记——第4章 复合类型
第4章 复合类型 1. 如果将sizeof运算符用于数组名,得到的将是整个数组中的字节数. 2. 如果对数组的一部分进行初始化,则编译器把其他元素设置为0.因此,将数组中的所有元素初始化为0,只要显式 ...
- 学习C++.Primer.Plus 4 复合类型
本章介绍的有复合类型有: 数组. 字符串. 结构. 共用体. 指针 数组: 声明数组时数组长度必须为常量(或const). 只有初始化时可以用“=”,其它时候均不可以给数组直接赋值,除了赋值的元素以外 ...
- 再读《C++ Primer》——变量和基本类型
刚上大学那时,几个室友一块买了本<C++ Primer>第4版,看了一遍后就没怎么碰了,偶尔拿出来翻翻,当作工具书使用.后来知道有第5版了,一直觉得内容差不多吧.直到最近,再读其中的一些内 ...
- c++学习总结--复合类型,const。
复习c++,有必要对一些东西做一下笔记,方便以后学习,如有问题,欢迎提出. 首先,最常用两种复合类型应该是引用和指针. 所谓复合类型,是在基本类型基础(如:int)上定义的类型. 引用是c++的一个复 ...
- Angular快速学习笔记(2) -- 架构
0. angular 与angular js angular 1.0 google改名为Angular js 新版本的,2.0以上的,继续叫angular,但是除了名字还叫angular,已经是一个全 ...
- Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)
本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...
随机推荐
- shiro学习中报错解决方法
[1] 最近在学习shiro,在学习过程中出现了一个问题,报错如下: org.apache.shiro.UnavailableSecurityManagerException: No Security ...
- [转载]Python 3.5 协程究竟是个啥
http://blog.rainy.im/2016/03/10/how-the-heck-does-async-await-work-in-python-3-5/ [译] Python 3.5 协程究 ...
- redis 异常解决办法
redis 异常解决办法 26069:M 08 Aug 17:06:58.858 # WARNING: The TCP backlog setting of 511 cannot be enforce ...
- Python自动化运维工具fabric的安装
使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...
- Word转图片(使用Spire.doc)
Spire.Doc for .NET是一款由E-iceblue公司开发的专业的Word .NET类库.支持.net,WPF,Silverlight, 下载地址:http://www.e-iceblue ...
- ItemsSource绑定后ScrollViewer不复位
ItemsSource绑定后ScrollViewer不复位 ItemsSource绑定后ScrollViewer不复位,有的时候我们需要这一效果,但大多数情况下我们是想让它复位的. 在WPF中也有这个 ...
- Effective C++ -----条款31:将文件间的编译依存关系降至最低
支持“编译依存性最小化”的一般构想是:相依于声明式,不要相依于定义式.基于此构想的两个手段是Handle classes 和 Interface classes. 程序库头文件应该以“完全且仅有声明式 ...
- codeforces 515C. Drazil and Factorial 解题报告
题目链接:http://codeforces.com/problemset/problem/515/C 题目意思:给出含有 n 个只有阿拉伯数字的字符串a(可能会有前导0),设定函数F(a) = 每个 ...
- C# 总复习
1.循环语句 四要素:初始条件.循环条件.循环体.状态改变 循环的最后一句:循环条件不再满足 2. ++ --int a = 5; //在赋值语句中,后++需要,先进性赋值,然后进行+1运算 ...
- 开始使用 Fresco
如果你仅仅是想简单下载一张网络图片,在下载完成之前,显示一张占位图,那么简单使用 SimpleDraweeView 即可. 在加载图片之前,你必须初始化Fresco类.你只需要调用Fresco.ini ...