zoukankan      html  css  js  c++  java
  • Effective C++学习笔记备忘

    提示:本文是一篇个人读书笔记,并不是对原书内容的系统总结整理,可能对作者以外的读者没有太大的参考意义。

      目前对C++的了解还处于入门阶段,这本书真正看懂的内容大概只有一半左右。大部分条款和机制先建立一个印象,希望能在未来实际使用中再来回顾和加深理解。

    条款02:

    不允许在class内对static const类型变量赋值?替代方案是使用enum{NumTurns = 5};   (P14)

    条款03:

    1.const与指针(P17~18)

    char greeting[]="Hello";
    const char* p = greeting;//non-const pointer, const data
    char* const p = greeting;//const pointer, non-const data
    const char* const p =greeting; //const pointer, const data

    决定哪个是常量与*和const二者位置相关。const *表示被指物是常量,* const表示指针自身是常量。常量Widget对象,下面两种意义相同:

    void f1(const Widget* pw);
    void f2(Widget const * pw);

    2.const_cast和static_cast转型(P24)

    条款04:

      member initalize list比构造函数为成员变量赋值效率通常更高,后者相当于调用了default构造函数为它们设初值,然后再赋予新值。(P28)

    条款07:为多态基类声明virtual析构函数

      正如题名,这么做是为了经由base class指针删除derived class对象时把derived部分也一并销毁。(P41)

      把不带virtual析构函数的类作为基类是不明智的,比如string/vector/list/set/tr1::unordered_map等等。

    条款11:在operator=中处理“自我赋值”

      方法一:判断两个操作数是否相同,比较耗费资源;

      方法二:swap()创建rhs的副本,并与this交换。

    条款20:

      传递const引用可以避免传value引起的派生类被“切割”(slicing),不仅仅是高效。(P89)

    条款27:

      使用容器存储直接指向derived class对象的指针(通常是智能指针)避免dynamic_cast。

    条款30:

      inline函数如果改变,那么所用到的所有文件都需要重新编译;反之,non-inline函数改变时只需重新连接就好,比前者负担小得多。

    条款43:

      template特化版:template<>语法,使得在参数为某一个时模板全特化。

  • 相关阅读:
    vue 封装 全局弹窗 js-dom
    vue 封装时间戳 用过滤方法封装
    前端上传img 并且添加水印
    原生ajax 封装
    vue filters 过滤用法 时间戳方法
    node+mysql+vue 搭建前后端分离基础框架
    基于jq div拉拽功能
    进程间通信方式+线程间通信方式
    只能生成栈对象和只能生成堆对象
    linux的基础命令行和shell的区别
  • 原文地址:https://www.cnblogs.com/wuyuegb2312/p/3038010.html
Copyright © 2011-2022 走看看