![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
EffectiveC++
luixiao1220
这个作者很懒,什么都没留下…
展开
-
Effective C++(Boost)
author:luixiao1223#TITLE: boost字符串 and 文本处理容器函数对象和高级编程反省编程模板元编程数学和数值正确性和测试数据结构语言间的支持内存杂项...原创 2020-02-25 11:29:01 · 129 阅读 · 0 评论 -
Effective C++(tr1)
author:luixiao1223title: TR1the standard C++ library specified by C++98The Standard Template Library (STL),including containers (vec- tor, string, map, etc.);iterators;algorithms (find, so...原创 2020-02-25 11:21:11 · 154 阅读 · 0 评论 -
Effective C++(请慎重看待警告信息)
author:luixiao1223title: 请慎重看待警告信息例子class B {public: virtual void f() const;};class D: public B {public: virtual void f();};编译器会发出警告warning: D::f() hides virtual B::f()这个意思是隐...原创 2020-02-25 10:59:26 · 95 阅读 · 0 评论 -
Effective C++(写了placement new就要写placement delete)
author:luixiao1223title: 写了placement new就要写placement delete问题Widget *w=new Widget;假如分配内存成功了.但是Widget的构造函数失败了出现这种情况怎么办?因为用户是拿不到w指针的.所以这个任务只能有运行系统自己负责.placement newvoid* operator new(std...原创 2020-02-25 10:54:20 · 88 阅读 · 0 评论 -
Effective C++(编写new和delete时需固守常规)
author:luixiao1223title: 编写new和delete时需固守常规new如果顺利返回指针如果不顺利, 调用new handler(希望它可以做些什么).如果没有new handler则返回 =bad_alloc=void* operator new(std::size_t size) throw(std::bad_alloc){ using...原创 2020-02-25 10:08:33 · 244 阅读 · 0 评论 -
Effective C++(理解new和delete的合理替换时机)
author:luixiao1223title: 理解new和delete的合理替换时机为什么想替换编译器提供的new和delete用来检测运用上的错误.强化效能(默认的new和delete针对的是通用使用情况,设置中庸)如果想追求极致的效率,则需要自己去现实new和delete收集使用上的统计数据一个例子static const int signature = 0xD...原创 2020-02-12 16:53:51 · 164 阅读 · 0 评论 -
Effective C++(了解new-handler的行为)
author:luixiao1223title: 了解new-handler的行为tipsSTL 的heap时容器所拥有的分配器对象管理的,不是new和delete管理.什么是new-handlernew抛出一场以反映一个未获满足的内存需求之前,会先调用一个用户指定的错误处理函数.这个就是new-handler.namespace std { typedef void...原创 2020-02-12 16:31:08 · 155 阅读 · 0 评论 -
Effective C++(认识template元编程)
author:luixiao1223title: 认识template元编程介绍元编程是C++ template的一个副产物.它不是被发明的,而是被发现的.而且它时图灵完备的.TMP的好处可以让事情更容易,没有它也许有的事情更困难甚至不可能TMP执行与C++编译期,可以把某些错误提前到编译期就可以发现.TMP因为运行在编译期,则更高效.较小的可执行文件,较短的运行期,较...原创 2020-02-12 15:01:17 · 129 阅读 · 0 评论 -
Effective C++(使用traits classes表现类型信息)
author:luixiao1223title: 使用traits classes表现类型信息工具性templatesadvance,可以将迭代器移动某个距离.template<typename IterT, typename DistT>void advance(IterT& iter, DistT d); // 如果d<0则可以向后移动.STL...原创 2020-02-12 14:02:55 · 124 阅读 · 0 评论 -
Effective C++(需要类型转换时请为模板定义非成员函数)
author:luixiao1223title: 需要类型转换时请为模板定义非成员函数问题描述template<typename T>class Rational {public: Rational(const T& numerator = 0, const T& denominator = 1); const T numerator...原创 2020-02-11 23:52:06 · 106 阅读 · 0 评论 -
Effective C++(接收兼容类型)
author:luixiao1223title: Accept all compatible types问题描述在指针的世界你可以这么做class Top { ... };class Middle: public Top { ... };class Bottom: public Middle { ... };Top *pt1 = new Middle;Top *pt2 =...原创 2020-02-11 23:20:27 · 86 阅读 · 0 评论 -
Effective C++(从templates中抽离无关的参数)
author:luixiao1223title: 从templates中抽离无关的参数代码膨胀template<typename T, std::size_t n>class SquareMatrix {public: ...; void invert();};代码开始膨胀SquareMatrix<double,5> sm1;s...原创 2020-02-10 15:23:05 · 147 阅读 · 0 评论 -
Effective C++(处理模板化基类内的名称)
author:luixiao1223title: 处理模板化基类内的名称例子代码class CompanyA {public: ...void sendCleartext(const std::string& msg); void sendEncrypted(const std::string& msg); ...};class Co...原创 2020-02-10 14:55:19 · 170 阅读 · 0 评论 -
Effective C++(了解typename的双重意义)
author:luixiao1223title: 了解typename的双重意义template 声明式中template<typename T> class Widget;template<class T> class Widget;这两种声明式没有任何的区别。typename的用处template<typename C>void ...原创 2020-02-10 10:46:01 · 111 阅读 · 0 评论 -
Effective C++(了解隐式接口和编译期多态)
author:luixiao1223title: 了解隐式接口和编译期多态多态的实现方法运行时多态 虚函数(virtual)编译期多态 template显式接口和隐式接口显示接口void doProcessing(Widget& w){ if(w.size()>10 && w!=someNastyWidget){ ...原创 2020-02-09 20:56:22 · 129 阅读 · 0 评论 -
Effective C++(审慎的使用多重继承)
author:luixiao1223title: 审慎的使用多重继承坏处class BorrowableItem{public: void checkOut();};class ElectronicGadget{private: bool checkOut() const;};class MP3Player:public BorrowableIte...原创 2020-01-17 19:22:41 · 148 阅读 · 0 评论 -
Effective C++(审慎的使用private继承)
author:luixiao1223title: 审慎的使用private继承privateclass Person{};class Student:private Person{};// 使用私有继承时,基类的所有函数都会变成派生类的私有函数。基类的私有,派生类是无法访问的。void eat(const Person& p);void study(const Stu...原创 2020-01-17 17:41:04 · 180 阅读 · 0 评论 -
Effective C++(has a)
author:luixiao1223title: has a注意区分is a 和 has a的区别。有时候错误的使用is a 与hada,是导致混乱的根源。原创 2020-01-17 17:03:44 · 139 阅读 · 0 评论 -
Effective C++(不要重新改写继承来的函数的默认参数)
author:luixiao1223title: never redefine default parameter value我们已经说过重新改写继承而来的非虚函数是不允许的。那么我们局限于讨论继承而来带有默认参数的虚函数。class Shape{public: enum ShapeColor { Red, Green, Blue}; virtual void d...原创 2020-01-17 16:51:37 · 175 阅读 · 0 评论 -
Effective C++(不要再派生类重新定义非虚函数)
保持基类行为和派生类行为再非虚函数上保持一致。class B{public: void mf();};class D:public B{...};D x;B *pb=&x;pb->mf();D* pd=&x;pd->mf();//如果你再D中重新定义了mf你会发现两个调用方式的行为不一致。这种行为是非常混乱的。要尽量避免....原创 2020-01-17 16:27:03 · 122 阅读 · 0 评论 -
Effective C++(虚函数的替代方法)
本条介绍类如何使用非虚函数的方式来设计你的类NVI(non-virtual interface)class GameCharacter{public: int healthValue() const{ // do some extra work int retVal = doHealthValue(); // do some extra...原创 2020-01-17 16:17:12 · 575 阅读 · 0 评论 -
Effective C++(继承接口还是继承实现)
只继承接口class Shape{public: virtual void draw() const = 0;};纯虚函数是让派生类只继承接口。 *其实你可以给纯虚函数些一份代码* 但是调用它却必须明确指出class的名称。比如Shape *ps = new Shape;Shape *ps1=new Rectangle;ps1->draw();Shape *ps2=...原创 2020-01-17 15:14:53 · 94 阅读 · 0 评论 -
Effective C++(继承时候的函数作用域)
local 的变量会遮挡global的变量。同理,Derived class会遮挡base class的变量和函数。被屏蔽的基类函数class base{private: int x;public: virtual void mf1() = 0; virtual void mf1(int); virtual void mf2(); void m...原创 2020-01-17 15:02:35 · 189 阅读 · 0 评论 -
Effective C++(public继承就是is-a关系)
public 继承当你看到public继承的时候,实际上是一个is-a关系。比如D继承与B,就意味着,B是比D更一般的概念,而D是更特殊的。但是B可以使用的地方.D也可以使用。tips编译期能发现错误,要好于运行时能发现的错误。尽量写在编译器就能发现错误的代码。...原创 2020-01-16 11:51:57 · 200 阅读 · 0 评论 -
Effective C++(降低文件依赖)
编译依赖例子class Person{public: Person(const std::string& name, const Date& birthday, const Address& addr); std::string name() const; std::string birthDate() const; std::stri...原创 2020-01-16 11:45:06 · 191 阅读 · 0 评论 -
Effective C++(inline函数的方方面面)
tips看起来像函数,动作像函数,比宏好得多。免除函数调用 and 浓缩那些即便不含函数调用的代码较好的指令缓冲命中率。inline通常一定被放在头文件里面。因为是编译过程中进行inline的不是连接过程中。因为inline需要知道代码和大小。templates通常也被放在头文件中,因为编译器需要知道怎么具现化它。templates和inline是无关的,但是如果你想...原创 2020-01-14 18:06:45 · 153 阅读 · 0 评论 -
Effective C++(为异常安全努力是值得的)
指导原则不泄露任何资源class PrettyMenu{public: void changeBackground(std::istream& imgSrc);private: Mutex mutex; Image* bgImage; int imageChanges;};void PrettyMenu::changeBackground(st...原创 2019-12-29 20:41:54 · 202 阅读 · 1 评论 -
Effective C++(尽量不要把内部变量暴露出来)
Table of Contents通过编译但是错误handles更好的方案(但是也有瑕疵)瑕疵通过编译但是错误class Rectangle{public: Point& upperLeft() const { return pData->ulhc;} Point& upperRight() const { return pData-...原创 2019-11-23 01:27:16 · 157 阅读 · 0 评论 -
Effective C++(尽量不要使用转型)
Table of Contents旧式转型New C++ 转型const_castdynamic_castreinterpret_caststatic_cast指导原则尽量都使用新的类型转换。类型转换可能会产生代码如何调用基类的函数错误的示例正确示例,拿掉转型避免使用 dynamic_cast方法一方法二要尽量避免的错误示例最后旧式...原创 2019-11-22 21:05:08 · 180 阅读 · 1 评论 -
Effective C++(尽量压后变量的定义)
author:luixiao1223title: 尽量延迟变量定义的出现时间Why过早的构造成本有可能根本就不会用到std::string encryptPassword(const std::string& password){ using namespace std; string encrypted; if (password.l...原创 2019-10-30 17:58:55 · 122 阅读 · 0 评论 -
Effective C++(一个不抛出异常的swap函数)
author:luixiao1223title: 一个不抛出异常的swap函数来看标准STL版本的swapnamespace std{ template<typename T> void swap(T& a, T& b) { T temp(a); a = b; b = temp; ...原创 2019-10-22 14:07:13 · 170 阅读 · 0 评论 -
Effective C++(若所有参数需要类型转换,请采用non-member函数)
author:luixiao1223title: ‘若所有参数需要类型转换,请采用non-member函数’tips令class支持隐式类型转换是一件糟糕的事情。例子class Rational{ const Rational operator* (const Rational& rhs) const;};如果这样用可以Rational oneEng...原创 2019-10-22 14:04:07 · 95 阅读 · 0 评论 -
Effective C++(用非成员函数,非友元函数来替换成员函数)
author:luixiao1223title: ‘用非成员函数,非有元函数来替换成员函数’封装性好坏的衡量标准越少的代码能访问到数据,封装性就越好。根据这个逻辑。所以用非成员函数,非有元函数,来封装实现一些可以通过调用已有的成员函数的功能。可以提高封装性。是namespace,还是utility class,来封装这些功能函数?namespace好可以分布在不同的文...原创 2019-10-22 14:03:01 · 217 阅读 · 0 评论 -
Effective C++(把成员变量声明为private)
author:luixiao1223title: 把成员变量声明为private只有private具有封装性变量的获取全靠函数public问题如果改变了public成员变量。很多客户代码要修改。成本巨大。protect问题如果改变了protect成员变量,很多继承代码要跟着改变。成本巨大。结论只有private具有封装性, public和protect都不具有封装性...原创 2019-10-22 14:01:53 · 159 阅读 · 0 评论 -
Effective C++(返回对象时,别返回reference')
author:luixiao1223title: ‘返回对象时,别返回reference’糟糕代码const Rational& operator*(const Rational& lhs, //这里返回的是一个引用类型。糟糕的点 const Rational& rhs){ Rational re...原创 2019-10-22 14:00:46 · 200 阅读 · 0 评论 -
Effective C++(尽量通过传递const reference替换 value)
author:luixiao1223title: Pass by reference to const替换 pass by valuereference to constbool validStudent(const Student& s);错误示范class Window {public: std::string name() const; vir...原创 2019-10-22 13:56:14 · 82 阅读 · 0 评论 -
Effective C++(设计class犹如设计type)
author:luixiao1223title: 设计class犹如设计type新type的对象应该如何被创建和销毁?构造析构内存分配,释放函数operator new, operator new[], operator delete, operator delete[]对象的初始化和对象的赋值该有什么样的差别?assignment新type的对象如果被pass...原创 2019-10-20 21:07:15 · 102 阅读 · 0 评论 -
Effective C++(设计易用难错的接口)
author:luixiao1223title: 接口易用难错用类代替裸参数struct Day{ explicit Day(int d) :val(d){} int val;};struct Month{ explicit Month(int m) :val(m){} int val;};struct Y...原创 2019-10-20 19:38:32 · 159 阅读 · 0 评论 -
Effective C++(编译器同行优化)
author:luixiao1223title: new操作和放入管理器用多行问题processWidget(std::tr1::shared_ptr<Widget>(new Widget), priority());编译器会把上面的语句分成三个步骤调用 priority执行new Widget调用 shared_ptr 构造函数*但是编译器用什么顺序来...原创 2019-10-17 12:49:46 · 110 阅读 · 0 评论 -
Effective C++(delete and delete [])
author:luixiao1223title: ‘delete and delete []’new 是用[] 则删除也用 delete []注意typedef问题typedef std::string AddressLines[4];std::string *pal = new AddressLines;delete pal; // Error 之删除了第一个...原创 2019-10-17 12:35:37 · 111 阅读 · 0 评论