Effective C++ 随笔(1)
条款一 c++ 为一个语言联邦
1、四个层次 C:blocks,语句,预处理器,内置数据类型,数组,指针
面向对象的C++:封装,多态,继承
Template C++
STL
条款二 尽量以const,enum,inline代替#define
Static const
常量的声明和定义,声明应该是在头文件当中,定义是在实现文件当中。对于基本类型需要一个类似赋值的语句,例如:
const double classname::membername = 12;
但是对于对象的定义使用下面的方式 class classone{};
const classone classname::class1;
这点实际上和java非常不一样,在java当中这只是意味着进行了声明,初始化需要new出对象来,但是这里已经进行了初始化,而且此处使用默认的构造函数
条款三 尽可能使用const
1、const 常量的定义
const char * pointer 表示const的data,但是指针可以变化
char * const pointer 表示const的指针,但是指针指向的data可以变化
const char * const pointer 表示data和指针都是不能变化的
总结:在星号之后表示指针式const,在星号之前表示data是const
2、const 在函数定义当中的使用
const 成员函数
class classname{
private: string functionname() const;
};
此处表示functionname成员函数不能修改类的数据成员
const参数
string function (const string & str);
此处表示function不可以修改str
条款4 确定对象被使用前已经被初始化
c++规定对象的成员变量的初始化在进入构造函数本体之前,在构造函数中进行的都不是初始化,而是赋值操作。在这之前有一个defaut构造函数被自动调用的过程 因此实际上default构造函数的构造全部作废。
可以使用初始化列表
这不仅是为了提高效率,有时也是必须的,比如类成员的成员变量如果为const类型则在声明时就应该进行初始化,若为default的方式是会出错的,需要使用初始化列表,来对其定义
Effective C++ 随笔(1)的更多相关文章
- Effective C++ 随笔(5)
条款27:尽量稍作转型动作 const_cast:常量性移除 dynamic_cast:安全向下转型 reinterpret_cast: static_cast: 如在子类当中享调用父类当中的某个方法 ...
- Effective C++ 随笔(4)
条款21:必须返回对象时,别妄想返回其reference 例子: Raional类可以执行有理数的一些运算,并且使用heap内存申请 并且其operator*函数为 const Rational&am ...
- Effective C++ 随笔(3)
条款12: 以对象管理资源 两种只能指针: std:auto_ptr<> 当使用copy操作室,原先的智能指针指向为null std:tr1:share_ptr<int> sp ...
- Effective C++ 随笔(2)
条款5 了解c++默默编写并调用哪些函数 编译器自动生成的copy 构造函数,copy赋值操作符,析构函数,构造函数,这些都是public和inline的,此处inline的意思是他们的定义都是在头文 ...
- Effective Modern C++翻译(1):序言
/*********************************************************** 关于书: 书是我从网上找到的effective Modern C++的样章,内 ...
- 小王子浅读Effective javascript(一)了解javascript版本
哈哈,各位园友新年快乐!愚安好久没在园子里写东西了,这次决定针对javascript做一个系列,叫做<小王子浅读Effective javascript>,主要是按照David Herma ...
- Linux随笔-鸟哥Linux基础篇学习总结(全)
Linux随笔-鸟哥Linux基础篇学习总结(全) 修改Linux系统语系:LANG-en_US,如果我们想让系统默认的语系变成英文的话我们可以修改系统配置文件:/etc/sysconfig/i18n ...
- AI人工智能系列随笔
初探 AI人工智能系列随笔:syntaxnet 初探(1)
- 【置顶】CoreCLR系列随笔
CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...
随机推荐
- mysql 复制原理与实践
复制功能是将一个mysql数据库上的数据复到一个或多个mysql从数据库上. 复制的原理:在主服务器上执行的所有DDL和DML语句都会被记录到二进制日志中,这些日志由连接到它的从服务器获取,并复制到从 ...
- opencv中imread第二个参数的意义
文档中是这么写的: Flags specifying the color type of a loaded image: CV_LOAD_IMAGE_ANYDEPTH - If set, return ...
- (转)EasyUI 分页总结
最近用到了easyui的分页和搜索栏功能,使用过程中由于运用不熟练导致其间也出现过一些问题,下面做个小结,供大家共同学习.1.首先使用EasyUI 的DataGrid分页,得加载其js类库:< ...
- 解决 win 7 64 位 vs2010 调试silverlight项目无法加载,提示更新developer ,跟新报 消息 ID: 1517 已安装了 Silverlight 的 64 位版本
出现上面的问题是我们安装的silverlight的版本和系统给的silverlight下载的版本冲突, 解决的方法是,首先卸载Silverlight runtime(也就是默认的silverlight ...
- Triangle2D类(Java)
定义Triangle2D类,包含: 三个名为p1.p2和p3的MyPoint型数据域,这三个数据域都带有get和set方法.MyPoint在练习题10.4中定义. 一个无参构造方法,该方法创建三个坐标 ...
- 前端面试问题js汇总
1.javascript的typeof返回哪些数据类型 Object number function boolean underfind 2,数组方法pop() push() unshift()shi ...
- git分支切换时的时间戳问题
1.为什么git仓库没有保留文件修改时的时间戳? 摘自:https://git.wiki.kernel.org/index.php/Git_FAQ#Why_isn.27t_Git_preservin ...
- Vsphere初试——使用Vsphere client
好不容易安装好ESXi之后,就要安装一个Vsphere Client,为什么要安装这个东东.使用过vmware workstation的人都知道,安装完就可以添加虚拟机,但是ESXi要通过Vspher ...
- vc项目中加载多个lib遇到的问题
一个VC项目中 在网络加密 json解析等方面 加载了多个第三方库和文件 boost cryptpp rapidjson mysql的连接池等等 在使用mysql++的时候 多次报错 LNK 20 ...
- 关于win10系统配置变量时,javac编译不出的原因:没用好百度!
在上班时,用笔记本的win8系统成功配置了java环境,于是想把家里的台式也配置一下,可是配置出来后javac却出不来东东,我很费解,重新下载了2次,还是不行,于是就暂时放弃了.那时是17年12月25 ...