
C++
文章平均质量分 82
zhangqixiang5449
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Effective C++ 笔记 第一部分 让自己习惯C++
1.视C++为一个语言联邦(View C++ as a federation of languages)C++可分为4个主要的次级语言 1.C 2.Object - Oriented C++ 3.Template C++ 4.STL2.尽量以const, enmu , inline 替换 #define(Prefer consts,enums,and inlines to #defines)原创 2015-11-05 14:18:46 · 491 阅读 · 0 评论 -
Effective C++ 笔记 第五部分 实现
26.尽可能延后变量定义式的出现时间(Postpone variable definitions as long as possible) 尽可能延后变量定义式的出现。这样做可以增加程序的清晰度并改善程序效率。 在变量定义式出现后,将调用构造函数,若该变量未被使用,则浪费效率。 不只要延后变量的定义,直到非得使用该变量的前一刻为止。甚至应该尝试延后这份定义直到能够给他初值实参为止。如果这样原创 2015-11-22 00:21:12 · 420 阅读 · 0 评论 -
Effective C++ 笔记 第七部分 模板与泛型编程
41.了解隐式接口和编译期多态(Understand implicit interface and compile-time polymorphism.) classes和templates都支持接口和多态。 对classes而言接口是显示的,以函数签名为中心。多态则是通过virtual函数发生于运行期。 对template参数而言,接口是隐式的,奠基于有效表达式。多态则是通过template原创 2015-11-24 13:31:45 · 444 阅读 · 0 评论 -
Effective C++ 笔记 第八部分 定制new和delete
49.了解new-handler的行为(Understand the behavior of the new-handler) set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被调用。 Nothrow new是一个颇为局限的工具,因为它只适用于内存分配;后继的构造函数调用还是可能抛出异常。 当operator new无法满足某一内存分配需求时,他会先调用一个客户原创 2015-11-25 00:28:31 · 366 阅读 · 0 评论 -
Effective C++ 笔记 第九部分 杂项讨论
53.不要轻忽编译器的警告(Pay attention to compiler warnings.) 严肃对待编译器发出的警告信息。努力在你的编译器的最高警告级别下争取无任何警告的荣誉。 不要过度依赖编译器的报警能力,因为不同的编译器对待事情的态度并不同。一旦移植到另一编译器上,你原本依赖的警告信息有可能消失。 54.让自己熟悉包括TR1在内的标准程序库(Familiarize yoursel原创 2015-11-25 14:03:44 · 402 阅读 · 0 评论 -
More Effective C++ 第一部分 基础议题
1.仔细区别pointers和references 当你知道你需要指向某个东西,而且绝不会改变其指向其他的东西,或当你实现一个操作符而语法需求无法由pointer达成,你就应该选用reference.任何其他时候,请使用pointers. 指向NULL一个reference必须代表某个对象,即不可为NULL。而pointer 可以。若使用reference将意味着不再考虑reference成为N原创 2015-12-14 19:03:57 · 375 阅读 · 0 评论 -
More Effective C++ 第二部分 操作符
5.对定制的”类型转换函数”保持警觉 使用类型转换函数将会导致预期之外的转型,应避免隐式的转换,使用显式转换代替。 C++可以使自定义类型增加隐式类型转换的功能,方法: 1.使用单自变量construcor。class Name{public: Name(const string& s);//将string转换为Name};2.使用隐式类型转换操作符class Name{pu原创 2015-12-14 21:43:13 · 345 阅读 · 0 评论 -
More Effective C++ 第三部分 异常
exceptions:异常9.利用destructors避免泄漏资源使用智能指针可保证异常发生异常时不发送内存泄漏。10.在constructor内阻止资源泄漏若一个对象在constructor函数内发送了异常。那么这个对象是不完整的,new返回的是null指针,不能调用destructor ,会产生资源泄漏。 对此作出的策略是在constructor内捕捉可能发送的异常,进行清理工作。再继续传播原创 2015-12-15 20:42:49 · 359 阅读 · 0 评论 -
More Effective C++ 第四部分 效率
16.谨记80-20法则程序80%的时间用在20%的代码上,盲目的优化程序并不会带来性能的显著改善,应该先借助程序分析器寻找那20%的代码,对其实行优化。17.考虑使用缓式评估(lazy evaluation)缓式评估更通俗的说法是拖延战术。延缓运算,直到运算结果被迫切的需要为止,这样可以避免一些得到结果却无用的计算。例如标准库的stringString s1 = "HH";String s2 =原创 2015-12-15 22:34:37 · 291 阅读 · 0 评论 -
More Effective C++ 第五部分 技术
本部分内容比较高深,涉及很多较高端的技术。笔记会有许多不足的地方,若复习可以在看一遍书。只看笔记恐怕无法彻底理解。 25.将constructor和non-member function虚化virtual constructorvirtual constructor是并非是constructor,其根据输入可产生不同类型的对象(以多态的方式返回),常用的使用情况如在磁盘读取数据,产生一个或为音乐,原创 2015-12-18 16:11:30 · 341 阅读 · 0 评论 -
Effective C++ 笔记 第六部分 继承与面对对象设计
32.确定你的public继承塑模出is-a关系(Make sure public inheritance models “is-a”) “public继承”意味is-a。适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每一个derived class对象也都是一个base class对象。 33.避免遮掩继承而来的名称(Avoid hiding原创 2015-11-23 00:14:45 · 417 阅读 · 0 评论 -
Date语意学 Data Member的存取
已知下面这段代码Point3d origin,*pt = &origin;存取data member有什么区别origin.x = 0.0;pt->x = 0.0;Static Data MembersStatic data members被编译器提出于class之外,被视为一个global变量。 若X是一个Static data members,则origin.x = 0.0;pt->x =原创 2015-10-28 19:39:00 · 374 阅读 · 0 评论 -
Effective C++ 笔记 第二部分 构造/析构/赋值运算
5.了解C++默默编写并调用哪些函数(know what functions C++ silently writes and calls) 编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。 编译器拒绝提供copy assignment操作符的2种情况: 1.有reference成员变量 2.有const成员变量原创 2015-11-07 20:47:42 · 384 阅读 · 0 评论 -
C++构造函数语意学 - Constructor(The Semantics of Constructors)
1.默认构造函数(Default Constructor)default constructors 在编译器需要时被合成出来。被合成出来的constructor只执行编译器所需的行动。也就是说default constructor不会将data members(如 int型)初始化,而是处理member object(成员对象)等编译器的需求。对于class X ,如果没有任何user-declat原创 2015-10-24 16:29:46 · 505 阅读 · 0 评论 -
Effective C++ 笔记 第三部分 资源管理
资源管理就是一旦用了它,将来必须还给系统。13.以对象管理资源(Use objects to manage resources) 为防止资源泄露,请使用RAII(资源取得时机便是初始化时机)对象,他们在构造函数中获得资源并在析构函数中释放资源。 两个常被使用的RAII classes分别是tr1::shared_ptr和auto_ptr。前者通常是较佳的选择,因为其copy行为比较直观。若选择a原创 2015-11-08 00:32:09 · 496 阅读 · 0 评论 -
C++拷贝构造函数语意学 copy constructor(The Semantics of Constructors)
使用copy constructor的三种情况有三种情况,会以一个object的内容作为另一个class object的初值。 1.显式的以一个object的内容作为另一个class object的初值class X{......};X x;X xx = x;2.当object被当做参数交给某个函数时void foo(X x);void bar(){ X xx; foo(xx原创 2015-10-26 20:27:29 · 975 阅读 · 0 评论 -
程序转化语意学 Program Transformation Semantics
显示的初始化操作已有定义X x0;下边三个定义,显式的使用x0初始化void foo(){ X x1(x0); X x2 = x0; X x3 = X(x0);}将被编译器转化为调用class 的 copy constructorvoid foo(){ X x1; X x2; X x3; x1.X::X(X0);//调用X::X(const原创 2015-10-26 22:48:07 · 410 阅读 · 0 评论 -
Data语意学 - 类的大小应该是多少? (The Semantics of Data )
以下程序运行在64位机上,使用Xcode7.0.1,一个指针8字节。类的大小应该是多少?一个空的类的对象大小是多少?一个对象必须要在内存中占有一定的位置以表明他是存在的。class X{};所有编译器会在class X 的声明中加入一个隐藏的1 byte大小的char,使得这一class的object在内存中拥有独一无二的地址。所以X对象的大小应是1byte. 在大部分机器上,聚合的结构体大小会原创 2015-10-27 22:54:19 · 430 阅读 · 0 评论 -
Effective C++ 笔记 第四部分 设计与声明
18.让接口容易被使用,不易被误用(Make onterfaces easy to use correctly and hard to use incorrectly) 好的接口容易被正确使用,不容易被误用。你应该在你的所有接口中努力达成这些性质。 “促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容。 “阻止误用”的办法包括建立新类型、限制类型上的操作,束缚对象值,以及消除客户的原创 2015-11-13 00:12:05 · 520 阅读 · 0 评论 -
Data语意学 继承与Data Member
单继承在没有多态的情况下比较简单,只是把基类堆叠到派生类上边,组成一个新的类。注意基类的alignment造成的调整边界产生的内存使用并不会消失。class A{public: char a;};class B: public A{ //B的大小是8public: int c;};加上多态后需要在object中导入一个vptr,加入的vptr可以放在尾部(与C stru原创 2015-10-28 23:55:32 · 459 阅读 · 0 评论 -
Function语意学 Member的各种调用方式
Nonstatic Member Functionsnonstatic member functions和一般的nonmember function有相同的效率。也就是说下边两种函数效率相差不多。float func(const ClassA *this){...}//nonmember functionfloat ClassA::func() const{...}//nonstatic memb原创 2015-10-29 20:33:57 · 469 阅读 · 0 评论 -
More Effective C++ 第六部分 杂项讨论
32.在未来时态下发展程序软件最初的开发与后续开发和维护的人通常不是同一批,所有我们需要强制某些规范,例如利用c++语言特性强制对象产生与heap内。不要想着我记得不去做某些事就行,需要强制实行。确保operator和函数拥有自然的语意。应和内建类型一样,如果疑惑,不妨看看ints有怎样的表现。任何事情之一有人能做,就会有人做。例如抛出异常,将对象自我赋值,在为获得初值前使用对象,给函数非法的值……原创 2015-12-18 19:11:41 · 414 阅读 · 0 评论