当前位置: 首页 > news >正文

网站淘宝客 难做黑帽seo技术

网站淘宝客 难做,黑帽seo技术,东昌府聊城做网站费用,瑞安自适应网站建设More Effective C Basics reference & pointer reference 必定有值,pointer 可以为空reference 声明时必须定义,必须初始化reference 无需测试有效性,pointer 必须测试是否为 nullreference 可以更改指向对象的值,但是无法…

More Effective C++

Basics

reference & pointer

  • reference 必定有值,pointer 可以为空
  • reference 声明时必须定义,必须初始化
  • reference 无需测试有效性,pointer 必须测试是否为 null
  • reference 可以更改指向对象的值,但是无法指向其他对象,pointer 可以指向其他对象

cast

  • c 转型:(type)expr
  • c++ 转型:cast(expr)
    • static:just like c 转型,无类型检查
    • dynamic:base-》derived,有类型检查
    • reinterpret:二进制重新解释,受制于编译期平台
    • const:amend costness or volatileness

polymorphically array

  • 使用base array pointer处理derived array,会导致未定义行为

default constructor

  • 贸然提供default constructor需要在运行时测试是否值有效
  • 缺乏default constructor会带来束缚
    • 无法创建对象数组,只能创建指针数组
    • 可以使用 placement new 创建对象数组,显式使用析构函数的 placement delete删除
      • 使用 delete 删除 placement new 创建的对象会导致未定义行为

Operators

implicit conversion

  • 单参数构造函数(或其余参数有默认值)
  • 隐式类型转换操作符
  • 隐式类型转换导致难以发现的问题:
    • 构造函数标记为 explicit
    • 定义显式类型转换:asType()
    • 只能进行一次隐式转换,多次类型转换不会有问题

increment/decrement & prefix/postfix

  • 【++i,累加后取出】:clazz& operator++()
    • 返回引用,允许++++i
  • 【i++,取出后累加】:const clazz operator++(clazz)
    • 额外参数区分,参数不得使用
    • 返回const,不允许i++++
    • 为了使得逻辑一致,用increment prefix来实现increment postfix

override &&、||、,

  • 重载&&、||导致问题:
    • &&、||,条件满足/不满足会提前终止
    • 重载后,左右式作为函数参数都会被执行
  • 重载,导致问题:
    • 逗号表达式,先求解左式,再求解右式,值为右式
    • 重载后,函数无法保证执行顺序

new, operator new, placement new, delete, operator delete, []

  • new:无法重载,operator new + constructor + placement new
  • operator new:重载分配内存的行为
    • void * operator new(size_t)
  • placement new:重载在指定内存上构建对象
    • void * operator new(size_t, void* location)
  • delete:destructor + operator delete
    • placement new 分配的内存无法通过 operator delete 删除
      • 显式析构 + 分配内存对应的方式删除
        • new->delete
        • malloc->free

Exceptions

  • 程序运行出错时设置状态变量或返回错误码,无法保证异常被程序处理,程序可能会异常运行;而抛出异常如果未进行捕获,程序便会立刻终止。

delete in destructor

  • 将资源分配在对象内,在析构函数中删除内存
  • 析构函数必然会被调用,防止因为异常产生未删除内存

exceptions in constructor

  • 构造函数异常,部分构造的对象不会自动析构
    • 将所有成员变量视为RAII对象,使用shared_ptr

exceptions in destructor

  • 使用uncaught_exception判断析构函数时候正有一个exception在作用中
  • 正在处理异常的析构函数抛出未捕获的异常,会导致程序终止
  • 不应该让析构函数抛出异常,析构函数应该是异常安全的
stack unwinding

C++异常处理,栈展开机制:

  1. 异常被抛出
  2. 当前作用域,搜索异常处理程序catch块
  3. 未搜索到,销毁该作用域内的局部对象
    1. 调用析构函数出现异常,程序终止,std::terminate
  4. 退出当前作用域,继续搜索上一级作用域
  5. 未处理异常,std::terminate,std::abort,生成核心转储文件

catch exceptions param pass

  • 处理异常和函数传参的区别
    • 异常永远会被复制,因为异常处理程序超出函数调用作用域
      • 按值捕获,复制两次,传参一次,复制一次
      • 引用捕获,复制一次
    • 不发生隐式类型转换,仅能发生继承类型转换
    • 异常按catch的顺序处理,没有最优类型匹配
      • 子类异常应该写在基类异常的前面,否则不会被处理

catch exceptions by reference

  • catch by pointer:无法判断是否应该删除资源
  • catch by value:子类异常由基类捕获会导致对象切割,仅剩下基类行为
  • catch by reference:推荐使用,且仅复制一次

exception specifications

  • 在定义中指定函数可能抛出的异常
    • 未指定则表明可能抛出任何异常
    • 指定noexcept表明不会抛出任何异常
  • 抛出未定义异常会导致unexpected函数调用
    • unexpected的默认行为是调用terminate
    • 可以使用set_unexpected自定义处理行为
  • 可以提供额外的异常定义说明,但是违反说明的异常会直接导致程序终止

exception handling cost

  • 异常处理会使得程序效率下降5%~10%

Efficiency

80-20 rule

  • 80%的资源被20%的代码占用,不仅需要大幅优化代码,更重要的是找到那20%的瓶颈
  • 不根据经验和直觉,而是使用profiler来分析那20%代码

lazy evaluation

  • 如果计算不是绝对必要,使用lazy evaluation替代eager evaluation

over-eager evaluation

  • cache:缓存已计算的值
  • prefetch:预先从磁盘读取可能访问的值,每次读取磁盘多于请求量的值

avoid temporary

  • 临时对象≠局部对象,临时对象是没有名字的栈对象
    • 函数传参,隐式类型转换
      • by value:隐式转换为临时对象
      • by const reference:隐式转换为临时对象
      • by non-const reference:隐式转化无法被触发,因为对临时对象的修改无法反馈会引用对象,因此编译报错
    • 函数返回值
      • 使用+=替代+
      • 返回值优化RVO

return value optimize

  • 直接返回构造函数,避免临时对象的生成

overload to avoid implicit type conversions

  • 使用函数重载来避免没有函数重载时的隐式类型转换

supply += and +

  • 操作符+=往往比+有更高的效率
  • 重载操作符的时候提供+=版本

third party library

  • 相同功能的第三方库,在性能方面,可能会有不同的设计,和不同的效率偏重

inherit cost

  • virtual functions:
    • 每个class包含一个虚函数表
    • 每个对象包含一个虚函数表的指针
    • virtual 函数无法 inline,因为 inline 需要在编译期复制函数调用,而 virtual 需要运行期才能确定调用函数
  • multiple inheritance & virtual base classes
    • 菱形继承需要virtual base class,额外的指针开销
  • runtime type identification,RTTI
    • typeid获取class相应的type_info,需要额外的指针指向type_info
    • 可以在虚函数表中添加指向type_info的指针

Techniques

virtual constructor & non-member function

  • virtual constructor
    • factory function 根据参数生成不同的子类
  • virtual copy constructor
    • 每个子类添加虚函数clone调用拷贝构造函数
  • virtual non-member function
    • 每个子类添加虚函数实现具体操作
    • non-member function inline化,调用相应虚函数

limit class instance count

  • 关键资源有限,其对应的类示例数目也有限
    • 零或一:单例模式
    • n:在构造函数中添加static示例计数,使用make函数显式构造,防止隐式构造增加计数

fore constructor in/out of heap

  • in heap:对象有自杀能力,delete删除内存
  • out of heap:对象不会造成内存泄漏
  • 重载:
    • static void * operator new(size_t)
    • static void operator delete(void *)

smart pointers

  • 智能指针无法在子类和基类之间转换,需要借助于隐式类型转换操作符

reference count

  • 多数对象共享少数的实值,实值的产生和删除成本高,使用引用计数来记录共享对象的个数,在引用计数为零时删除

proxy class

  • 表示一个观念上不存在的对象
    • 实现[][]重载,proxy对象为Array1D

multi virtual function

  • 根据多个子类的类型判断调用的函数
    • func(base*, base*)
      • 虚函数+RTTI,运行时类型辨识
      • 虚函数重载
      • 自行实现虚函数表

Miscellany

http://www.dt0577.cn/news/6077.html

相关文章:

  • 蓬莱做网站案例百度帐号登录
  • 网站压力测试怎么做实时排名软件
  • 网站建设moban广告代发平台
  • 怎么做简单的微信浏览的网站武汉网站seo服务
  • 导航网站移动端流量占比热搜榜百度
  • 网站开发手把手百度网站app下载
  • 给一个网站做需求分析百度关键词排名十大排名
  • 网站备案服务类型职业培训学校加盟合作
  • 西安网站建设陕icp太原网站建设方案咨询
  • 网站模板站扩容市场调研方案
  • 福建省建设厅考试网站有什么推广产品的渠道
  • 广州新塘做网站seo怎么优化排名
  • 网页设计实训心得体会300字网页优化公司
  • 长沙模板建网站需要多久网站如何做优化推广
  • 公司起名字大全免费四个字厦门网站seo
  • 广州做网站最好的公司优化算法
  • 商城网站功能列表想学互联网从哪里入手
  • 网站制作自己做服务器seo管理是什么
  • 郴州网站优化企业网站如何优化
  • 小程序网站开发公司哪些行业适合做网络推广
  • 张家界市网站建设设计东莞网站建设做网站
  • 手机网页布局提升seo搜索排名
  • 自家电脑做网站江苏网站建设推广
  • 酒店 深圳 网站建设青岛网站seo推广
  • 手机验证登录网站开发深圳竞价托管
  • 一个企业做网站的意义广告营销平台
  • 提供哈尔滨网站建设服务天琥设计培训学校官网
  • 苹果电脑做网站郑州高端网站建设
  • 手机网站怎么做SEO优化seo公司的选上海百首网络
  • 百度推广销售话术营销型网站seo