C/C++ 零碎知识点
传递参数的一般指导原则:
对于使用传递的值而不做修改的函数:
- 如果数据对象很小,比如内置类型或者小型结构,按值传递。
- 如果数据对象是数组,只能使用指针,并将指针生命为指向const的指针。
- 如果数据对象是较大的结构,则使用const指针或者const引用,以提高程序效率。这样可节省复制结构所需的时间与空间。
- 如果数据对象是类对象,则使用const引用。类设计的语义要求使用引用,传递类对象的标准方式是按引用传递。
对于修改调用函数中数据的函数:
- 如果数据对象是内置类型,使用指针。
- 如果数据对象是数组,只能使用指针。
- 如果数据对象是结构,使用引用或者指针
- 如果数据对象是类对象,使用引用。
this指针:
this指针指向用来调用成员函数的对象(this被作为隐藏参数传递给方法)。每个成员函数(包括构造函数和析构函数)都有一个this指针,this指向调用对象,如果方法需要引用整个调用对象,则可以使用表达式 *this。 this指向的是对象的地址,对象本身则是*this。
局部返回值问题:
在C++ Prier Plus中有这样一段代码(P382~383)
Time Time::Sum(const Time & t) const
{
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / ;
sum.minutes %= ;
return sum;
}
参数是引用,返回值类型不是引用。将参数声明为引用是为了提高效率,减少内存使用。
返回值不能是引用,应为函数创建了一个新的Time对象sum,来表示另外两个Time对象的和,返回对象将创建对象的副本,而调用函数可以使用它。然而若是返回类型为Time& ,则引用的将是sum对象。但显然,sum是局部变量,函数结束内存释放,引用将指向一个不存在的对象。使用返回类型Time意味着程序将在删除sum之前构造它的拷贝,调用函数将得到该份拷贝。
注:上边提到了复制,复制肯定占内存以及影响性能。其实还可以在声明 Time sum 加上static,即
static Time sum; //存疑
复制构造函数的介绍:
http://blog.csdn.net/lwbeyond/article/details/6202256/
如果类中包含了使用new初始化的指针成员,应当定义一个复制构造函数,以复制指向的数据,而不是指针,这被称为深度复制。
静态成员函数:
静态成员函数是不能通过对象调用的,实际上,静态成员函数不能调用this指针,因其不与特定对象关联。如果静态成员函数在共有部分声明,则可以使用类名和作用域解析运算符来调用它。另外,静态成员函数只能调用静态数据成员。
在构造函数中使用new时应注意的事项:
- 如果在构造函数中使用了new来初始化指针成员,则应在析构函数中使用delete
- new与delete相互兼容,new对应于delete,new[] 对应于 delete[]
- 如果有多个构造函数,则必须以相同的方式使用new,要么都带中括号,要么都不带。因为只有一个析构函数,所有构造函数都需与其兼容。
- 应定义一个复制构造函数, 通过深度复制将一个对象初始化为另一个对象.具体而言,复制构造函数应复制数据,而不是地址。
- 应定义一个赋值运算符,通过深度复制将一个对象复制给另一个对象。
(以上,参见C++ Primer Plus Page 447 左右)
C/C++ 零碎知识点的更多相关文章
- webdriver零碎知识点
#零碎知识点,用于记录平时遇到的比较杂的知识点 driver.current_url 获取当前url phantomjs 实现无浏览器界面自动化测试(driver = webdriver.Phanto ...
- Android零碎知识点 1
Android零碎知识点 1 Android在2.3版本上开始支持KeyEvent.KEYCODE_PAGE_DOWN以及KeyEvent.KEYCODE_PAGE_UP的操作. Androi ...
- C++ 零碎知识点
C++的一些知识点比较零碎,下面清单的形式做一些记录与归纳,以供参考. 1.赋值操作符重载(深复制): (1)由于目标对象可能引用了以前的一些数据,所以应该先delete这些数据: (2)注意到对象可 ...
- 大数据学习day19-----spark02-------0 零碎知识点(分区,分区和分区器的区别) 1. RDD的使用(RDD的概念,特点,创建rdd的方式以及常见rdd的算子) 2.Spark中的一些重要概念
0. 零碎概念 (1) 这个有点疑惑,有可能是错误的. (2) 此处就算地址写错了也不会报错,因为此操作只是读取数据的操作(元数据),表示从此地址读取数据但并没有进行读取数据的操作 (3)分区(有时间 ...
- iOS开发零碎知识点
记录一些常用和不常用的iOS知识点,防止遗忘丢失.(来源为收集自己项目中用到的或者整理看到博客中的知识点),如有错误,欢迎大家批评指正:如有好的知识点,也欢迎大家联系我,添加上去.谢谢! 一.调用代码 ...
- 11、网页制作Dreamweaver(补充:JS零碎知识点&&正则表达式)
JS知识点 回车符/r和换行符/n的区别:/r 相当于enter,是段落与段落之间的区别, /n 相当于shift+enter,是行与行之间距离,比较小 几种window操作方法: 1.获取当前窗口大 ...
- salesforce零基础学习(八十八)项目中的零碎知识点小总结(二)
通过做项目以及群里面的一些大神的聊天,总结一下关于项目中的两个知识点,以后当做参考. 一. 在custom setting中配置集成接口信息后刷sandbox的问题 我们做项目时,经常会遇见和其他平台 ...
- 整理OD一些快捷键和零碎知识点
第一次记录:2019.9.15 完成了近期基本知识点的记录 第二次记录:2019.9.16 更新VB和的Delphi的汇编代码特点 介绍几个快捷键: Alt+B 断点编辑器,空格键可切换断点状态 ct ...
- salesforce零基础学习(一百一十二)项目中的零碎知识点小总结(四)
本篇参考: https://trailblazer.salesforce.com/issues_view?id=a1p4V0000003znDQAQ https://salesforce.stacke ...
- python零碎知识点一
dir(object),列出对象所有可以用的的方法(参数可以为任意对象,例如class,func等) >>>dir('str') ['__add__', '__class__', ' ...
随机推荐
- 网络安全监控实战(一):Snort,Wazuh&VT
https://cloud.tencent.com/developer/news/222711
- PADS常用画板过程
转载:PADS LAYOUT的一般流程 http://www.doc88.com/p-9129306856292.html https://wenku.baidu.com/view/cc4e0b338 ...
- 新建一个浏览器APP
安卓开发环境准备好了,试试新建一个浏览器程序吧 1.Start a new Android Studio Project 2.选这个像微信一样的样式 3.选择语言和版本 4.等待创建完成,拖一个Web ...
- leetcode 118. Pascal's Triangle 、119. Pascal's Triangle II 、120. Triangle
118. Pascal's Triangle 第一种解法:比较麻烦 https://leetcode.com/problems/pascals-triangle/discuss/166279/cpp- ...
- LinuxGPIO中文文档
本文来自Linux官方文档英文版,由于需要使用Linux的GPIO进行实验,我翻译了这篇文档. 本文档描述了GPIO框架的使用者接口.注意它描述了新的基于描述符的接口. 不推荐使用的基于整数的GPIO ...
- FragmentFactory
import android.support.v4.app.Fragment; import java.util.HashMap; public class FragmentFactory { pri ...
- 降级、熔断、限流[z]
[z]https://juejin.im/post/5cced96e6fb9a032514bbf94当我们的系统的访问量突然剧增,大量的请求涌入过来,最典型的就是秒杀业务了,我们可能会知道会有一波高峰 ...
- JavaEE-实验二 Java集合框架实验
该博客仅专为我的小伙伴提供参考而附加,没空加上代码具体解析,望各位谅解 1. 使用类String类的分割split 将字符串 “Solutions to selected exercises ca ...
- Thymeleaf 页面表达式基础
转自:http://www.cnblogs.com/vinphy/p/4674247.html#undefined (一)Thymeleaf 是个什么? 简单说, Thymeleaf 是一个 ...
- HashMap根据value值排序
)))); Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); for (Map.Entry s : entr ...