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__', ' ...
随机推荐
- docker容器无法删除——状态Dead
问题:由于容器挂载数据卷,无法直接删除. 解决: 先查出ID 进行杀掉,然后再删除. . 搞定
- PHP CI 框架初识(一)
CodeIgniter 是一个简单快速的PHP MVC框架.EllisLab 的工作人员发布了 CodeIgniter.CodeIgniter 是一套小巧但功能强大的.给 PHP 网站开发者使用的 W ...
- leetcode-easy-math-412 Fizz Buzz
mycode 99.06% class Solution(object): def fizzBuzz(self, n): """ :type n: int :rtype ...
- leetcode-easy-dynamic-198 House Robber-NO
mycode 思路: a:1 2 3 4 5 6 7 8 9 f(9) =max( f(7) + a9 ,f(8)) 前一步.前两步 至于前三步 f(9) = f(6)+ a9,但其实f(7)在求值的 ...
- 算法 - 剪枝游戏 - Green Hackenbush
场景:给颗树,轮流剪掉一条枝,没枝可剪的人输. 题目:Deforestation | HackerRank 讲解:Games!: Green Hackenbush 哎,差点自己想出来答案,最后还是看了 ...
- Selenium 2自动化测试实战9(简单元素操作)
一.简单元素操作 1. webdriver中常用的几个方法: clear():清除文本 send_keys(*value):模拟按键输入 click():单击元素 clear()方法用于清除文本输入框 ...
- 阶段3 2.Spring_01.Spring框架简介_02.今日课程内容介绍
spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的A ...
- 4.1 primitive and reference values
ECMAScript variables may contains two different types of data: primitive values and reference values ...
- 如何获取当前包名与activitity&&抓log
若hi1:获取当前包名以及Activity (1)adb shell dumpsys activity | find "mFocusedActivity" (2)adb shell ...
- IOS CocoaPods详细使用方法
自从有了CocoaPods以后,这些繁杂的工作就不再需要我们亲力亲为了,只需要我们做好少量的配置工作,CocoaPods会为我们做好一切 一.什么是CocoaPods 1.为什么需要CocoaPo ...