条款一:仔细区别pointers 和 reference
1.一个reference必须总代表某个对象,没有所谓的null reference.如果你有一个变量,其目的是用来指向(代表)另一个对象,但是也有可能它不指向(代表)另一个对象,那么应该使用pointer,因为你可以将pointer设为null.由于reference一定得代表某个对象,c++要求reference必须有初值。
string& rs;//错误,引用必须被初始化
string s("xyz");
string& rs = s;//正确
2.pointers可以被重新赋值,指向另一个对象,reference却总是指向(代表)它最初获得的那个对象
string s1("nancy");
string s2("clancy");
string& rs = s1;
string *ps = &s1;
rs = s2;//rs仍然代表s1,只是s1的值变为和s2一样
ps = &s2;//s1不受影响
3.当实现某些操作符时,必须要使用reference,比如operator[].这个操作符必须返回某种能够被当作赋值对象的东西:
vector<int> v();
v[] = ;
//如果operator []返回的是pointer,则要写成下面的样子:
*v[] = ;//这会误解为v是个以指针形成的vector
条款一:仔细区别pointers 和 reference的更多相关文章
- 【More Effective C++ 条款1】仔细区别pointers和references
1)操作符的差别 指针使用"*"和"->"操作符,而引用使用"."操作符 2)初始化的差别 有空指针,但是没有空引用,和const对象 ...
- 【M1】仔细区别pointers和references
1.引用必须初始化,而且不能修改指向,这一点和const对象十分相似. 2.引用和指针用法不同,对于引用int& ri = a; rhs是个对象,引用前面加&:对于指针,int* pi ...
- Effective C++ -----条款10: 令operator=返回一个reference to *this
比如: Widget& operator=(const Widget& rhs) { ... return* this; } 令赋值(assignment)操作符返回一个referen ...
- EXW_FOB_CIF_CFR 外贸报价方式&条款之间的区别与联系
一.工厂交货价(EXW=Ex Works): 交货地点:出口国工厂或仓库: 运 输:买方负责: 保 险:买方负责: 出口手续:买方负责: 进口手续:买方负责: 风险转移:交货地: 所有权转 ...
- 《More Effective C++》读书笔记(零)Basic 基础条款
这是篇读书笔记,只记录自己的理解和总结,一般情况不对其举例子具体说明,因为那正是书本身做的事情,我的笔记作为梳理和复习之用,划重点.我推荐学C++的人都好好读一遍Effective C++ 系列,真是 ...
- More Effective C++ 35 条款
一.基础议题(basics) 条款1:仔细区别 pointers 和 references(Distinguish between pointers and references) 一个基本的语法问题 ...
- More Effective C++ 基础议题(条款1-4)总结
More Effective C++ 基础议题(条款1-4)总结 条款1:仔细区别pointers和references 如果有一个变量,其目的是用来指向(代表)另一个对象,但是也有可能它不指向(代表 ...
- ###《More Effective C++》- 基础议题
More Effective C++ #@author: gr #@date: 2015-05-11 #@email: forgerui@gmail.com 一.仔细区别pointers和refere ...
- C++学习书籍推荐《More Effective C++》下载
百度云及其他网盘下载地址:点我 编辑推荐 <More Effective C++:35个改善编程与设计的有效方法(中文版)>:传世经典书丛 媒体推荐 <Effective c++&g ...
随机推荐
- H.264学习笔记2——帧内预测
帧内预测:根据经过反量化和反变换(没有进行去块效应)之后的同一条带内的块进行预测. A.4x4亮度块预测: 用到的像素和预测方向如图: a~f是4x4块中要预测的像素值,A~Q是临块中解码后的参考值. ...
- java 解析四则混合运算表达式并计算结果
package ch8; import java.util.LinkedList; import java.util.List; import java.util.Stack; /** * 四则混合运 ...
- 面向对象编程(OOP)基础知识(一)
Java是一个支持并发.基于类和面向对象的计算机编程语言. 下面列出了面向对象软件开发的优点: 1.代码开发模块化,更易维护和修改. 2.代码复用. 3.增强代码的可靠性和灵活性. 4.增加代码的可理 ...
- ROS在rviz中实时显示轨迹(nav_msgs/Path消息的使用)
消息结构说明nav_msgs/Path.msg结构#An array of poses that represents a Path for a robot to followHeader heade ...
- python3安装opencv及电子书籍(百度云)
不能直接 pip install opencv 正解: pip install opencv-python 记得:请确保网络良好!!!!! (1)这个是我学习的电子书籍:opencv-python ...
- 最后一个非零数字(POJ 1604、POJ 1150、POJ 3406)
POJ中有些问题给出了一个长数字序列(即序列中的数字非常多),这个长数字序列的生成有一定的规律,要求求出这个长数字序列中某个位上的数字是多少.这种问题通过分析,找出规律就容易解决. 例如,N!是一个非 ...
- ffmpeg处理网络流
最近遇到好几个人在问ffmpeg如何处理网络流,刚好前段时间也在做这方面,抽空整理了下,把主要代码发出来,希望对大家有用.为简单处理,我这里只简单介绍UDP接收TS流,其实只要是socket接收的都可 ...
- C++ 之 string
C++ 的 string 类封装了很多对字符串的常用操作. string 类是模板类 basic_string类,以 char作为其元素类型的类. string 以单字节作为一个字符,如果处理多字符集 ...
- Hibernate-02
一.hibernate实体创建规则 1.hibernate---->持久层ORM 映射框架,专注于数据的持久化工作. 2.持久化类创建规则 --->1.提供无参数的构造方法 2.私有化.对 ...
- JavaScript实现AES算法加密和解密
JavaScript的加密和解密用的是google的CryptoJS库.本文以AES/ECB/NoPadding为例展示AES加密和解密的方法. 需要下载CryptoJS库,下载地址如下:https: ...