• Effective c++读书笔记


    1、视C++为一个语言联邦
        C、object-oriented C++、template C++、STL
    2、尽可能使用const:
        1)关键字const出现的星号左边,表示被指物事常量;如果出现在星号右边,表示指针自身是常量;如果出现在两边,表示被指物和指针都是常量。
        2)stl迭代器中申明迭代器为const就像申明指针为const一样,表示这个迭代器不得指向不同的东西,但他所指向的东西的值是可以改动的。如果希望所指的东西不可被改动,你需要的是const  iterator。
        3)const成员函数:两个成员函数如果只是常量性不同,可以被重载。如果一个函数的返回类型是个内置类型,那么改动函数返回值从来就不合法。
        4)在const和non-const成员函数中避免重复:第一次这里将*this从其原始类型转为const类型。第二次则是从const operator    []的返回值中移除const。添加const的那次强迫进行了一次安全转型,使用static_cast。移除const的那个动作只可以藉由const_cast完成,没有其他选择。const成员函数调用non_const成员函数是一种错误行为,因为对象有可能因此被改动。
                const char & operator[]()const
                {}
                char & operator[]
                {
                    return
                          const_cast<char&>(static_cast<const textblock&>(*this)[position])
                }
    请记住:将某些东西申明为const对象可以帮助编译器查找出错误。const可被施加于任何作用于内对象、函数参数、函数返回类型、成员函数本体;当const和non_const成员函数有这实质等价的实现时,令non_const版本调用const版本可避免代码重复。
    3、确定对象被使用前已先被初始化
        1)为内置型对象进行手工初始化,因为C++不摆正初始化他们
        2)构造函数最好使用成员初值列,而不要在构造函数本体内使用赋值操作。初值列列出的成员变量,其排列次序和他们在class中申明的次序相同
        3)为免除“跨编译单元之初始化问题”,请以local static对象替换non-local static对象。
    4、了解C++默默编写并调用那些函数
        编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符、以及析构函数
    5、若不想用编译器自动生成的函数,就该明确拒绝(接4)
        为驳回编译器自动提供的机能,例如copy构造函数、copy assignment操作符等,可将相应的成员函数申明为private并且不予实现。使用像uncopyable这样的base class也是一种方法。
    6、为多态基类填加virtual析构函数

          polymorphic带多态性质的,base class 应该申明一个virtual析构函数 。如果class带有任何virtual的函数,他就应该拥有一个virtual析构函数;classes的设计目的如果不是为了base class 使用,或不是为了具备多态性,就不该声明virtual析构函数.

  • 相关阅读:
    WordPress后台添加侧边栏菜单
    Redis 使用多个数据库及密码配置
    datatable 修改点击列头进行排序顺序
    命令行客户端操作pg数据库常用操作
    pg 创建自增id
    让 PHP COOKIE 立即生效(不用刷新就可以使用)
    js cookie
    使用mysql监视器即命令行下的mysql
    javascript 获取键盘上的按键代码KeyCode
    吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
  • 原文地址:https://www.cnblogs.com/EOEHVT/p/5808101.html
Copyright © 2020-2023  润新知