Exceptional c++

1.带有检测机制的标准库(first是否在与last之前)

#include <iostream>
#include <iterator>
template <class InputIt,typename Value>
InputIt find(InputIt T_first,InputIt T_last,const Value& T_value)
{
      typename std::iterator_traits<InputIt>::difference_type len= std::distance(T_first,T_last);
      //auto len= std::distance(T_first,T_last);
       if (len<= 0)
          return T_last;
       while(len> 0)
       {
             if (T_value== *T_first)
                return T_first;
            ++T_first;
            --len;
       }   
       return T_last;
}
int main()
{
    char ch[]={'a','b','c','d','e','f'};
    auto p= find(std::begin(ch),std::end(ch),'h');
    if (p== std::end(ch))
    {
        std::cout<<"no find\n";
        return 0;
    }
    std::cout<<"find "<<*p<<"\n";
    return 0;
}

2.c++中并不允许对内部类型的临时变量进行修改

3.模板构造函数并不能代替构造函数,其将与其他构造函数一起共同参与重载解析

4.通过异常退出构造函数意味着对象实际从来没有被构造为一个完整对象,即这个对象生命周期没有开始过

5.析构函数、重载operator delete[]或内存释放函数声明为noexcept

6.将可能发生异常的代码单独放在一起并对其进行安全处理,之后才可以使用不会抛出异常的操作来修改(或清理)

7.异常安全(在出现异常的情况下仍然能够正确运行);异常中立(将所有的异常都转发给调用者,而不会在对象中产生完整性问题)

8.应努力使每个模块、每个类、每个函数都只有单一的并且是明确定义的功能(内聚性)

9.new object,operator new(SIZE) 前一个有初始化objcet,即自由存储中将包含被默认构造号的一个object对象。

10.基本保证就是用来保证可析构性和没有资源泄漏;强保证则增加了对commit-or-rollback语义的保证;无异常抛出保证则用来保证在函数中不会抛出异常

11.the delete operator and operator delete() are not the same thing.

delete some_pointer:call the destructor of the object pointed to by some_pointer,and then calls operator delete() to free the memory;

12.对外层作用域(基类、外部类或者名字空间)中的函数f()进行隐藏式表示在内层作用域(派生类、嵌套类或者嵌套名字空间)中定义为一个相同名字f()

的函数,这将隐藏外层作用域中的相同名字的函数

13.名字隐藏:派生类函数会自动地隐藏所有在直接基类和间接基类中名字相同的函数

14.基类*p= new 派生类[size];

delete[] p;

永远都不要通过多态的方式来处理数组

转载于:https://www.cnblogs.com/Call-C/p/7136987.html

exceptional c++:47个c++工程难题、编程问题和解决方案(中文版)》讲述如何用标准c++进行企业级的软件开发,通过“问题/解答”的方式,启发读者思考,帮助了解隐藏在问题背后的设计思想,以及各种编程指导原则适用的场合。本书列出的条款涵盖了许多方面的主题,尤其对异常安全性、类和模块的合理设计,正确的代码优化,以及编写符合c++标准的可移植代码进行了深入的讨论。   《exceptional c++:47个c++工程难题、编程问题和解决方案(中文版)》适于有一定c++编程基础的读者阅读。 目录 《exceptional c++:47个c++工程难题、编程问题和解决方案(中文版)》 1 泛型程序设计与c++标准库 1 条款1:迭代器难度系数 1 条款2:大小写不敏感的字符串——之一 5 条款3:大小写不敏感的字符串——之二 9 条款4:可重用性最高的泛型容器——之一 12 条款5:可重用性最高的泛型容器——之二 13 条款6:临时对象 22 条款7:标准库的使用(或者,再论临时对象) 28 2 异常安全性相关的问题与技术 31 条款8:编写异常安全的代码——之一 32 条款9:编写异常安全的代码——之二 37 条款10:编写异常安全的代码——之三 40 条款11:编写异常安全的代码——之四 47 条款12:编写异常安全的代码——之五 50 条款13:编写异常安全的代码——之六 56 条款14:编写异常安全的代码——之七 62 条款15:编写异常安全的代码——之八 65 条款16:编写异常安全的代码——之九 68 条款17:编写异常安全的代码——之十 73 条款18:代码的复杂性——之一 75 条款19:代码的复杂性——之二 79 3 类的设计与继承 85 条款20:类的编写技巧 85 条款21:虚函数的重载 93 条款22:类之间的关系——之一 99 条款23:类之间的关系——之二 103 条款24:继承的使用和滥用 110 条款25:面向对象程序设计 121 4 编译器防火墙和pimpl惯用法 123 条款26:将编译期依赖性降到最低——之一 123 条款27:将编译期依赖性降到最低——之二 127 条款28:将编译期依赖性降到最低——之三 132 条款29:编译防火墙 135 条款30:fast pimpl惯用法 138 5 名字查找、名字空间和接口规则 148 条款31:名字查找与接口规则——之一 148 条款32:名字查找与接口规则——之二 152 条款33:名字查找和接口规则——之三 162 条款34:名字查找与接口规则——之四 167 6 内存管理 176 条款35:内存管理——之一 176 条款36:内存管理——之二 179 条款37:auto_ptr 186 7 误区、陷阱以及错误的惯用法 201 条款38:对象标识 201 条款39:自动转换 204 条款40:对象的生存期——之一 206 条款41:对象的生存期——之二 209 8 其他主题 219 条款42:变量的初始化 219 条款43:正确使用const 222 条款44:类型转换 231 条款45:bool 238 条款46:转调函数 242 条款47:控制流程 244 后记 254 参考书目 256
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值