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__', ' ...
随机推荐
- ubuntu下mysql数据库存储路径修改
一.安装mysql ubuntu系统安装配置APT源,apt install mysql-server mysql-client 二.查看安装端口情况 sudo netstat -tap | grep ...
- linux下jmap,jstat和jstack使用
刚好用到,转自http://blog.csdn.net/sinat_29581293/article/details/70214436 有空再整理: 先jps -ml 再sudo -u hive /u ...
- 阶段3 2.Spring_05.基于XML的IOC的案例1_2 基于XML的IOC的案例-编写spring的Ioc配置
首先配置service对象,配置完Service对象就是注入dao对象. 但是现在没有dao对象,那就需要先配置dao对象.dao配置好以后.上线dao的注入就可以通过refs对象来注入这个dao了 ...
- git远程分支被误删,本地分支还存在,如何恢复远程分支?
做项目的时候碰到了这样一件事:本地分支存在,远程分支不在了,如图: (git branch -a 是查看本地和远程分支,红色部分是远程分支) (git branch -r 是查看远程分支的) 奇怪的是 ...
- 域名查询是否注册的demo
import json import multiprocessing import threading import requests import xmltodict # 万网查询 def chec ...
- ABAP 实现内表自定义的F4功能
“实现多列内容的F4功能 REPORT Z_TAB_TEST. TYPES: shlp_descr TYPE shlp_descr . DATA: BEGIN OF itab OCCURS 0 ...
- SSH整合项目----在线商城
1.1 网上商城需求分析 1.1.1 前台:用户模块. 注册: * JS非空校验.(不是必须) * Struts2数据校验:在注册Action类同一包下新建UserAction-user_reg ...
- 项目中使token
项目中使token 如果项目架构采用前后端分离,并采用分布式架构,通过定义接口API,与前端进行数据交互,前端通过html前行实现.若加入移动端(Andriod,ios)实现,可直接使用API接口实现 ...
- 使用putty远程登录Ubuntu时,报Network error:Connection refused错误及解决(记录)
putty远程登录Ubuntu,弹出Network error:Connection refused的错误提示框,就是因为Ubuuntu没有安装ssh服务.执行命令: sudo apt-get ins ...
- C++中sort函数使用方法
一.sort函数 1.sort函数包含在头文件为#include<algorithm>的c++标准库中,调用标准库里的排序方法可以实现对数据的排序,但是sort函数是如何实现的,我们不用考 ...