条款1:区别指针和引用 条款2:最好使用C++转换操作符 条款3: 绝对不要以多态的方式处理数组 条款4: 避免无用的缺省构造函数 条款1:区别指针和引用 1.指针(pointer) 使用[*/->] 引用(reference) 使用[.] 2.a.引用没有null b.引用必须初始化 c.引用不可以被重新赋值 3.引用比指针的效率更高(其实只是更安全),引用不需要判定是否为null 总结: 指向不变用引用 条款2:最好使用C++转换操作符 C的强制转换是一定会实现,但是并不保证强转后的结果是否…
More Effective C++ 基础议题(条款1-4)总结 条款1:仔细区别pointers和references 如果有一个变量,其目的是用来指向(代表)另一个对象,但是也有可能它不指向(代表)这个变量,那么应该使用pointer,因为可将pointer设为null,反之设计不允许变量为null,那么使用reference 以下这是有害的行为,其结果不可预期(C++对此没有定义),编译器可以产生任何可能的输出 char *pc = 0; // 将 pointer 设定为null char…
条款16 谨记80-20法则 条款17 考虑使用 lazy evaluation(缓释评估) 条款18 分期摊还预期的计算成本 条款19 了解临时对象的来源 条款20 协助完成"返回值的优化"("RVO" return value optimization) 条款21 利用重载技术(overload)避免隐式类型转换(implicit type conversion) 条款22 考虑以操作符的复合形式(op=)取代其单独形式(op) 条款23 考虑使用其他库函数 条…
条款5 对定制的"类型转换函数"保持警惕 条款6 区别increment/decrement操作符的前值和后置形式 条款7 千万不要重载&&,||,和,操作符 条款8 了解不同意义的 new 和 delete 条款5 对定制的"类型转换函数"保持警惕 1.C++有默认类型转换,如 int---char 2.单自变量constructors(能够以单一变量成功调用起constructor,起构造函数可以有多个参数但是除第一个参数外,其他参数必须有初省值…
一 要求对象产生在heap中 阻止对象产生产生在non-heap中最简单的方法是将其构造或析构函数声明在private下,用一个public的函数去调用起构造和析构函数 class UPNumber { public: UPNumber(); UPNumber(int initValue); UPNumber(double initValue); UPNumber(const UPNumber& rhs); // pseudo destructor,它是const menber function…
条款9 使用析构函数防止内存泄漏 条款10 在构造函数中防止内存泄漏 条款11 禁止异常信息传递到析构函数外 条款12 理解"抛出一个异常''与"传递一个参数"或调用一个函数的差别 条款13  以by reference的方式捕获异常 条款14 明智的运用 exception specifications 条款15 了解异常处理的成本 条款9 使用析构函数防止内存泄漏 1. void processAdoptions(istream& dataSource) { wh…
一 允许零个或一个对象 我们知道每当即将产生一个对象,我们有一个constructor被调用,那么我们现在想组织某个对象的产生,最简单的方法就是将其构造函数声明成private(这样做同事防止了这个类被继承) class PrintJob; class Printer { public: void submitJob(const PrintJob& job); void reset(); void performSelfTest(); ... friend Printer& thePrin…
1.virtual constructor 在语法上是不可将构造函数声明成虚函数,虚函数用于实现"因类型而异的行为",也就是根据指针或引用所绑定对象的动态类型而调用不同实体.现在所涉及的 virtual-constructor实际上是"仿virtual-constructor. 假设你设计一个软件,用来处理新闻事件,它由文字和图形构成 class NLComponent { //用于 newsletter components public: // 的抽象基类 ... //包…
More Effective C++ #@author: gr #@date: 2015-05-11 #@email: forgerui@gmail.com 一.仔细区别pointers和references 1.1. 初始化 指针可以不初始化,引用必须初始化为. 引用没有null reference,指针可以设为NULL. //指针初始化为0,NULL,nullptr char *str = 0; int a = 1; //引用必须初始化,int &b;是错误的 int &b = a;…
1. 仔细区分 pointers 和 references references和pointers的差别描述如下: pointer:当需要考虑"不指向任何对象"时,或者是考虑"在不同时间指向不同对象"的能力时,应该采用pointer.前一种情况可以将pointer设为null,后一种可以改变pointer所指对象. reference:当确定"总是会代表某个对象",而且"一旦代表了该对象就不能再改变",那应该使用referen…
01:仔细区别 pointers 和 references 1:没有所谓的null reference,但是可以将 pointer 设为null.由于 reference 一定得代表某个对象,C++ 因此要求 references 必须有初值,但是pointers 就没有这样的限制. 没有所谓的 null reference 这个事实意味使用 references 可能会比使用 pointers更富效率.这是因为使用 reference 之前不需测试其有效性. 2:Pointers 和 refe…
一.基础议题 条款1:仔细区别pointers和references 指针使用*和->,引用使用"." 引用必须指向一个已初始化的对象,不能为null,而指针可以指向某个对象,也可以为null 指针可以被重新赋值指向另一对象,而引用不可变更指向. 条款2:最好使用C++转型操作符 使用C++的转型操作符可以被很好的辨识,精确指明意图. static_cast:基本拥有与C旧式转型相同的威力,以及相同限制.几乎什么都可以转,但是不能将struct转int,double转指针,不能移…
一.基础议题(basics) 条款1:仔细区别 pointers 和 references(Distinguish between pointers and references) 一个基本的语法问题. 条款2:最好使用 C++ 类型转换运算符(Prefer C++-style casts) C++的类型转换运算符安全,容易解析,分工精细,虽然要打多点字. 条款3:绝对不要以 polymorphically(多态)方式來处理数组(Never treat arrays polymorphicall…
百度云及其他网盘下载地址:点我 编辑推荐 <More Effective C++:35个改善编程与设计的有效方法(中文版)>:传世经典书丛 媒体推荐 <Effective c++>(Scott Meyers第一本书)的荣耀:“对于任何渴望在中阶或高阶层面精通c++的人,我慎重推荐<Effective c++>,” ——(The C/C++User's Journal) 作者简介 作者:(美国)梅耶(Scott Meyers) 译者:侯捷 Scott Meyers,世界顶…
22亿元现金,三年只拿到750多万元的利息.福建富豪陈发树的云南生意可谓失望之极.在漫长的官司中,曾经有绝处逢生之机的陈发树,连告状的主体都没有找准,岂能同强大的国企扳手腕?陈发树律师团距取胜只有三步之遥. 本刊特约作者任究/文 为期两年零七个月的官司输了,福建富豪陈发树的22亿元现金躺在云南红塔集团账上,法院除了判决红塔集团发还本金,陈发树望眼欲穿的云南白药股权一股也没有拿到,只拿到750多万元的利息. 2014年7月26日,云南白药发布<关于云南红塔集团有限公司与陈发树因股权转让纠纷诉讼案件…
C++ templates的最初发展动机很直接:让我们得以建立“类型安全”的容器如vector,list和map.然而当愈多人用上templates,他们发现templates有能力完成愈多可能的变化.容器当然很好,但泛型编程——写出的代码和其所处理的对象类型彼此独立——更好.STL算法如for_each, find 和 merge 就是这一类编程的成果.最终人们发现,C++ template机制自身是一部完整的图灵机:它可以被用来计算任何可计算的值.于是导出了模板元编程,创造出“在C++编译器…
百度云及其他网盘下载地址:点我 编辑推荐 <More Exceptional C++:40个新的工程难题.编程疑问及解决方法(中文版)>作为广为人知的<Exceptional C++>的续篇,采取了实用的“提问——解答”的组织形式,为C++中现实世界问题的解决提供了各种成功的策略.根据多年的一线经验,Herb Sutter为C++软件系统(从小项目到企业级应崩)没计人员提供了经过测试的技术和实用的解决方案.围绕着40个编程难题,<More Exceptional C++>…
[1]基础部分 (1)宏定义 <assert> <offset宏> <#pragma once> <宏定义学习> <预处理语句> <#if 0 #end if> <C语言 宏定义的1<<0 与 直接定义1 有什么区别> <区分不同操作系统.编译器不同版本的宏> <宏和函数的区别(一个BUG的总结)> (2)指针 <指针> <指针与数组> <指针运算>…
这是篇读书笔记,只记录自己的理解和总结,一般情况不对其举例子具体说明,因为那正是书本身做的事情,我的笔记作为梳理和复习之用,划重点.我推荐学C++的人都好好读一遍Effective C++ 系列,真是好书啊,对于学完C++ 基础知识的人,这是本高阶秘籍.值得注意的是 More Effective C++ 是以1997年的C++标准写的,那时候标准还不完善,20多年过去了,很多语言的漏洞和技术可能被新特性取代了,应该注意最终向新标准看齐. 笔记 条款1:仔细区别pointers 和 referen…
​ 此篇文章转载自:因應網路時代與雲端應用而生的 AGPL-3.0 授權條款 如你所见,原文为繁体,我将其转为简体并将"网路"替换为"网络",方便阅读.并未修改原文其他内容 GNU Affero General Public License 3.0 (AGPL-3.0) 是自由软体基金会于2007 年11 月19 日所发布的一份自由开源软体授权条款*(注一)*.这份授权条款与GPL-3.0 为孪生条款,因为这两份条款仅在第13 条有所不同,其余的规定则一模一样.但这…
转载:https://github.com/MyErpSoft/TypeScript-Handbook/blob/master/pages/zh-CHS/Basic%20Types.md 概述 为了让程序更易用,我们兼容几种最基本的数据类型:numbers(数字),strings(字符串),structures(结构),boolean(布尔值)等等.在 TypeScript 中,我们支持和 Javascript 几乎一样多的类型,并且新增了实用的枚举类型. Boolean 布尔值 最基础的数据类…
Java基础常见英语词汇(共70个) ['ɔbdʒekt] ['ɔ:rientid]导向的                             ['prəʊɡræmɪŋ]编程 OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程 [dɪ'veləpmənt][kɪt]工具箱                              ['vɜːtjʊəl]虚拟的 JDK:Java development kit, j…
基本命令的讲解 主要内容介绍 1.LINUX操作系统安装及初始化配置(熟悉):2.LINUX操作系统目录组成结构及文件级增删改查操作(重点):3.LINUX操作系统用户.权限管理(重点):4.开源软件及LINUX下软件包的管理(重点):5.LINUX操作系统磁盘管理(了解):6.LINUX操作系统网络基础(重点):7.LINUX操作系统状态监控命令(了解):8.LINUX操作系统进程管理(重点):9.网络服务基础(了解): 第一单元 Linux的安装及相关配置 计算机操作系统简介 操作系统是什么…
比如有一个Base类和一个Derived类,像下面这样: class BaseClass {…}; class DerivedClass : public BaseClass {…}; 因为是父类与子类的关系,所以可以这样写: DerivedClass *d; BaseClass *b = static_cast< BaseClass *>d; // 用C风格直接是 b = (BaseClass*) d; 我们可以弄一个简易的Shared型智能指针类,如果直接像下面这样写: template…
[Architecture Design] 3-Layer基础架构 三层式体系结构 只要是软件从业人员,不管是不是本科系出身的,相信对于三层式体系结构一定都不陌生.在三层式体系结构中,将软件开发所产出的程序代码,依照不同用途归类为:系统表示层.领域逻辑层.数据存取层.其中: 系统表示层 (Presentation Layer),用来归类「提供操作接口」的相关程序代码.例如:提供Textbox接受用户输入地址数据.透过MessageBox通知用户处理结果.甚至是提供Web API给远程系统使用,这…
条款6:当auto推导出意外的类型时,使用显式的类型初始化语义 条款5解释了使用auto来声明变量比使用精确的类型声明多了了很多的技术优势,但有的时候,当你想要zag的时候,auto可能会推导出了zig.例如,我有一个函数,它以const Widget&作为参数,并且返回std::vector<bool>,每一个bool暗示了Widget是否提供了一个特殊的特性. std::vector<bool> features(const Widget& w); 进一步假设第…
Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ①    一个是线程的内核对象,操作系统用它管理线程.系统还用内核对象来存储线程统计信息 ②    一个线程栈,用于维护线程执行时所需的所有函数参数和局部变量. 线程 == 内核对象 + 线程栈; 进程是有惰性的,CPU调度是线程,进程永远不会被调度,进程好比一个公司,线程就是每个干活的业务部门. 进程可以看作是线程的容器(…
***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 一. Accustoming Yourself to C++ Rule 03: Use const whenever possible. 条款03:尽可能的使用const const就是常量,它同意你指定一个语义约束,编译器会强制实施这项约束. 多才多艺的key…
条款26 尽可能延后变量定义式的出现时间(Lazy evaluation) 记住: ★尽可能延后变量定义式的出现.这样做可增加程序的清晰度并改善程序效率 ---------------------------------------------------------------------- 举例说明: std::string encryptPassword( const std::string &password ) { using namespace std; string encrypt…
条款4:确定对象被使用前已先被初始化 记住: ★为内置对象进行手工初始化,因为C++不保证初始他们 ★构造函数最好使用初始化列表,而不要在构造函数本体内使用赋值操作.初始化列表列出的成员变量,其排列次序应和它们在class中的声明次序相同 ★为免除“跨编译单元之初始化次序”问题,请以local static对象替换non-local static对象 -------------------------------------------------------------------------…