【M1】仔细区别pointers和references
1、引用必须初始化,而且不能修改指向,这一点和const对象十分相似。
2、引用和指针用法不同,对于引用int& ri = a; rhs是个对象,引用前面加&;对于指针,int* pi = &a; rhs是个对象地址,指针前面加*。注意:引用往往是用指针实现的,从int& ri = a; 可以认为a赋给ri,再取地址。
3、引用是一个对象的别名,不能指向为空,而且自始至终是这个对象的别名。指针是地址,可以指向为空,也可以指向不同的对象。
4、考虑对引用初始化:引用是一个对象的别名。引用不能指向为空,但是通过一定技巧,可以让引用指向为空。考虑,先让指针指向为空(0),解引用赋值给引用,那么这个引用就指向为空。如下:char* pc =0; char& rc = *pc; 这将导致未定义行为。对引用初始化,必须是下面的情况之一:
a、右端是一个对象。如果是常量(包括文本常量和具名常量),只能初始化const引用,因为常量不能修改。如果不是常量,可以初始化const引用或者non-const引用。
b、右端是另一个引用。
5、考虑对指针初始化和赋值:指针是个地址,本身就是一个int值。但是,不能使用int值赋值给指针(0除外)。对指针初始化或者赋值,rhs必须是下面的情况之一:
a、赋值为0,表示为空,不能使用其他int值,如果非要使用,必须使用reinterpret_cast进行转化。
b、另一个指针。
c、对一个对象取地址。
d、使用new 返回一个地址。
6、重载操作符返回引用。比如[],v[5] = 10; 如果返回指针,必须这样写 *v[5] = 10; 这显然很别扭。
7、考虑下面的情况:资源管理对象,内部有一个指针,指向heap对象。现在交换两个资源管理对象,该怎么做?
这种情况,只需要交换指针值就好了,不需要对指向的对象内容进行交换。举例来说,甲有房间钥匙501,乙有房间钥匙502,现在要求甲乙换房。如果你去把501房间和502房间的家具家电进行交换,那你也太傻了。简单的做法是,让甲乙二人交换一下房间钥匙就好了。
8、思考,指针本身是int值,表示一个地址,那么问题来,不同类型的指针到底有什么区别呢?
表示方法和内容没有区别,只是表明,指向不同的类型。这其实告诉编译器,应该怎么样去解释这个地址的内存大小和布局。也就是说,告诉编译器,把它指向的内容当作什么类型来看待。
【M1】仔细区别pointers和references的更多相关文章
- 【More Effective C++ 条款1】仔细区别pointers和references
1)操作符的差别 指针使用"*"和"->"操作符,而引用使用"."操作符 2)初始化的差别 有空指针,但是没有空引用,和const对象 ...
- 条款一:仔细区别pointers 和 reference
1.一个reference必须总代表某个对象,没有所谓的null reference.如果你有一个变量,其目的是用来指向(代表)另一个对象,但是也有可能它不指向(代表)另一个对象,那么应该使用poin ...
- golang 中Pointers Vs References
原文: https://spf13.com/post/go-pointers-vs-references/ Pointers Vs References Some languages includin ...
- c++interview
出自:https://github.com/huihut/interview Github | Docsify 简体中文 | English 关于 本仓库是面向 C/C++ 技 ...
- ###《More Effective C++》- 基础议题
More Effective C++ #@author: gr #@date: 2015-05-11 #@email: forgerui@gmail.com 一.仔细区别pointers和refere ...
- More Effective C++ 35 条款
一.基础议题(basics) 条款1:仔细区别 pointers 和 references(Distinguish between pointers and references) 一个基本的语法问题 ...
- C++学习书籍推荐《More Effective C++》下载
百度云及其他网盘下载地址:点我 编辑推荐 <More Effective C++:35个改善编程与设计的有效方法(中文版)>:传世经典书丛 媒体推荐 <Effective c++&g ...
- More Effective C++: 01基础议题
01:仔细区别 pointers 和 references 1:没有所谓的null reference,但是可以将 pointer 设为null.由于 reference 一定得代表某个对象,C++ ...
- More Effective C++笔记(一)(精心整理)
一.基础议题 条款1:仔细区别pointers和references 指针使用*和->,引用使用"." 引用必须指向一个已初始化的对象,不能为null,而指针可以指向某个对象 ...
随机推荐
- HTML5之video元素
一.video元素支持的视频格式 HTML5中的video标签支持3种常用的视频格式: 1.Ogg = 带有Theora 视频编码和Vorbis 音频编码的 Ogg 文件: 2.MPEG4 = 带有H ...
- iOS-利用AFNetworking(AFN 1.x)-实现文件断点下载
转:http://www.kaifazhe.com/ios_school/380066.html 官方建议AFN的使用方法 1. 定义一个全局的AFHttpClient:包含有 1> baseU ...
- HDU 1671 Phone List(POJ 3630)
Phone List Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Android 中屏幕点击事件的实现
在Android中如何用代码触发按钮点击事件?我想要触发代码执行按钮点击.实现对于单击按钮事件的模拟,触发单击按钮进入另一个界面. 就是声明一下什么moonlightcheese被声明了:在andro ...
- bjfu1238 卡特兰数取余
题目就是指定n,求卡特兰数Ca(n)%m.求卡特兰数有递推公式.通项公式和近似公式三种,因为要取余,所以近似公式直接无法使用,递推公式我简单试了一下,TLE.所以只能从通项公式入手. Ca(n) = ...
- 设置layoutControl1 中的 控件的 focus
设置 layoutControl1 中的layoutControl EnableAutoTabOrder 为 false; this.layoutControl1.ActiveControl = th ...
- 修改linux主机名称
linux修改主机名如下操作即可: [root@kel ~]# cat /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=no HOSTNAM ...
- Codeforces Round #363
http://codeforces.com/contest/699 ALaunch of Collider 题意:n个球,每个球向左或右,速度都为1米每秒,问第一次碰撞的时间,否则输出-1 贪心最短时 ...
- Tkinter教程之Toplevel篇
本文转载自:http://blog.csdn.net/jcodeer/article/details/1811341 '''Tkinter教程之Toplevel篇'''#TopLevel与Frame类 ...
- Multiple reportviewers on one page With reportviwer 11.0
Hi, evreryone: When I use VS 2012 to create report with reportviwer 11.0, I meet a problem abou ...