条款26:尽可能延后变量定义式出现时间 延后变量定义的时间可提高效率 条款27:尽量少做转型动作 Derived对象可能拥有不同的地址(当Base* 、Derived*指向该对象时) 尽可能使用新转型,因为其容易辨别且对转型类型进行了分类 条款28:避免返回handles指向对象内部成分 提高封装性,减小用
任何两个对象对于 “它们是否相等” 问题必须保持一致。与第一个要求不同,若无意中违反这一条,这种情形倒是不难想象。例如,下面的类,它实现了一个不区分大小写的字符串。字符串由 toString 保存,但在 equals 操作中被忽略。 /** * 覆写 Object 的 equals 方法时, 必须满足对称性要求
1. 先来点历史资料 std::bind是C++98中std::bind1st和std::bind2nd的后继特性,但是作为一种非标准特性而言,std::bind在2005年就已经是标准库的组成部分了。正是在那时,标准委员会接受了名称TR1的文档,里面就包含了std::bind的规格(在TR1中,bind位于不同的名字空间,所以是std::tr1::bin
effective python-Item 14 list.sort函数,比较容易用的是reverse,而其中还有个参数key,默认是NONE,此时排序是按照默认比较方法排序,比如数据按照大小,字符串按照字符的顺序,这种python中存在的数据类型,比较起来还是比较简单的。但是如果你比较的是objects,比较复杂,不能再按照数据大小或者
文章目录 前言条款一: 理解模板型别推导数组实参函数实参 条款二:理解 auto 的类型推导使用 auto 的好处显式类型初始化 条款三:理解 decltype返回值类型后置 总结 前言 本文内容主要摘录自 《Effective Modern C++》,本文主要是将书中开头类型推导部分的内容放在一块进行
《Effective C++》笔记(二) 四、设计与声明 18.让接口更容易被正确使用,不易被误用 首先,必须考虑客户可能做出什么样的错误。 例如: class Date{ public: Date(int month, int day, int year); }; Date d(30, 3, 1995);//不合理,应该(3, 30, 1995) Date d(2, 30,
The WSI is based on the "NET" (Net Effective Temperature), and it is applicable to both, hot and cold atmospheric conditions. The input parameters to the NET calculation are air temperature, humidity and wind, which are daily observed in the Por
Python编程要点 读写文件 python3有两种字符的类型,byte和str,前者的实例包含原始的8位值,后者的实例包含Unicode字符。把unicode字符转化为二进制数据常见方法就是utf-8。unicode 字符转为二进制,用encode方法,反过来,二进制到unicode字符,要用decode。 python2 允许随机像文件中写
并发编程 Executors.newSingleThreadExecutor()Executors.newFixedThreadPool(int)Executors.newCachedThreadPool()类锁和对象锁synchronized 修饰方法、代码块,修饰不同地方分别对应类锁或对象锁notify(), notifyAll()公平锁和非公平锁。自旋锁原子性(atomicity),可视性(vola
文章目录 概述理解“属性”这一概念属性特质atomic和nonatomic的区别?尽量将所有属性都声明为nonatomic要点 在对象内部尽量直接访问实例变量理解:“对象等同性”这一概念特定类所具有的等同判定方法等同性判定的执行深度容器中可变类的等同性 以“类族模式”隐藏实现细节创
在 Java 8 中,添加了函数式接口, lambda 表达式和方法引用,以便更容易地创建函数对象。下面是一段代码片段,按照字符串长度顺序对列表进行排序,使用匿名类创建排序的比较方法 (强制排序顺序): // Anonymous class instance as a function object - obsolete! Collection
31. Minimize complilation dependencies between files(handle class & interface class) 这部分需要记录下来, Handle classes #include <string> #include <memory> class PersonImpl; class Date; class Address; class Person { public: Person(const std
一般的new/delete操作--不利于扩展,维护 //参照书本的new/delete操作示例 class Investment {}; void f() { Investment* pInv = new Investment(); //... delete pInv; } 这么做不会有问题,但不好,如果在//...处会return,或者其他操作导致未执行delete pInv;操作,
遇到参数过多可以考虑建造者模式,在构造器中传入建造器,在建造器里面初始化参数,这样可以防止构造器参数过多传错了 public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int
文章目录 英中简繁术语对照介绍英简繁术语对照表 英中简繁术语对照 介绍 这里列岀本书出现之编程术语的英中对照。本中文版在海峡两岸同步发行,因 此我也列出本书简繁两版的术语对照,方便某些读者从中一窥两岸计算机用语。 表中带有*者表示本书对该词条大多直接釆用英文术
一构造/析构/复制 catch5 了解C++默认操作 5.1 编译器对空类class E{};自动编写一个默认构造函数E();一个拷贝构造函数E(const E& rhs){}一个析构函数~E(){}一个拷贝赋值操作符 E& operator =(const E& rhs){} 当E()内含引用成员进行赋值操作时,应该在初始化列表初始化,编译器不会为
range可以用来迭代一系列整数,如下: for i in range(10): print(i) 当我们迭代数据结构,例如字符串列表,可以直接在这个序列上迭代,如下: flavor_list = ['vanilla', 'chocolate', 'pecan'] for flavor in flavor_list: print(f'{flavor} is delicious') # vanilla is d
条款11:优先使用delete关键字删除函数而不是private却又不实现的函数 1.=delete 是C++ 11新特性——见侯捷C++ 九中的描述 删除的函数不能通过任何方式被使用 方便起见,删除函数被声明为公有的,而不是私有的。这样设计的原因是,使这个函数为公有的可以产生更易读的错误信息 任
目录第26条:iterator优先于const_iterator、reverse_iterator以及const_revserse_iteratoriterator和const_iterator关系2个iterator之间混合使用第27条:使用distance和advance将容器的const_iterator转换成iterator第28条:正确理解由reverse_iterator的base()成员函数所产生的iterat
第二章 构造/析构/赋值运算 (Constructors,Destructors,and Assignment Operators) 条款5:了解 C++ 默默编写并调用哪些函数 请记住: 编译器可以暗自为 class 创建 default 构造函数、copy 构造函数、copy 赋值运算符和析构函数 C++11中有6个: 1、构造 2、析构 3-4、拷贝构造和赋值
这个条款最好称为:“尽量用编译器而不用预处理”,因为#define 经常被认 为好象不是语言本身的一部分。这是问题之一。再看下面的语句: #define ASPECT_RATIO 1.653 编译器会永远也看不到 ASPECT_RATIO 这个符号名,因为在源码进入编译器 之前,它会被预处理程序去掉,于是 ASPECT_RATIO
先来定义一个简单的局部变量: int x; // 糟糕,忘记初始化了。x也许会被初始化为0也许不会,取决于上下文。 别在意。再来定义一个用迭代器(Iterator)解引用初始化的局部变量: template<typename It> void dwim(It b, It e) { while (b != e) { // 真的假的?声明一个变
除了一种特殊情况外,auto 类型推导就是模板类型推导(尽管二者在形式上看起来不同)当变量用 auto 声明时, auto 取代了模板中 T 的角色,而变量的类型等同于 ParamType。下面的例子展示了二者的等价性: auto x = 27; // 等价于以下模板推导 template<typename T> // 推导x类型的