zoukankan      html  css  js  c++  java
  • effective c++ 笔记 (1-3)

    //

    //  effective c++.cpp

    //  笔记

    //

    //  Created by fam on 15/3/23.

    //

    //


    //---------------------------15/03/23----------------------------


    //#01   c++为一个语言联邦

    {

       /*

            1:c++如今支持的编程形式:

                1:过程形式  2:面向对象形式  3:函数形式   4:泛型形式   5:元编程形式

            2:c++4个次语言:

            1> c: 说到底c++还是以c为基础的。

            2> object-oriented c++。也就是封装、继承、多态

            3>template c++泛型编程,他带来了一个崭新的编程范型,也就是模版元编程

            4>STLSTL标准库。

         

        */

    }



    //#02   尽量以constenuminline替换 #define

    {

       /*

            1:如果使用#define定义常量很可能找不到错误位置。此时用const来替换之,

            使用const还有个好处是,不会出现多份字符常量。

            关于const:

                1>当要使用一个指向常量字符串的常量指针是,最好使用const string

                使用 const std::string authorName("Scott Meyers");

                替换掉 const char* const authorName ="Scott Meyers";

                2>class的专属常量

                    class GamePlayer

                    {

                    private:

                        static const int NumTurns = 5;

                        int scores[NumTurns];

                    };

                    这里的NumTurns只是一个声明式,如果要取他的地址必须在之后给出定义:

                    const int GamePlayer::NumTurns;

            2:如果编译器不支持以上的static const来做初值设定可以改用 enum

            class GamePlayer

            {

            private:

                enum{ NumTurns = 5 };

                

                int scores[NumTurns];

            };

            关于enum:

                1> enum的行为比较像#defineenum无法取地址

                2> 纯粹的使用主义。enum是模版元编程的基础技术

            3:使用inline来替换函数宏。又安全,又可以写出模版元编程

         

            总结:对于常量,使用const enum来替换#define

                对于形式函数的宏,使用inline来替换#define

        */

        

    }


    //#03   尽可能使用const

    {

       /*

            1:const可以减少客户操作错误而造成意外,又不至于放弃安全性和高效性

            很重要的一点关于+ - * /等运算符操作返回一个const类型是很好的选择

            const Rational operator*(const Rational& lhs, const Rational& rhs);

            可以避免一下的操作

            Rtional a,b,c;

            (a*b) = c;

            2:const成员函数

            const实施于成员函数的目的,是为了确认该成员函数可作用于const对象身上。这类成员函数

            重要的原因:

                1>它们使class借口比较容易被理解。我们可以很容易地知道哪个函数可以改变对象内容,

                哪个不行(这也是const成员函数的作用,加了const修饰符就表示不可修改)

                2>它们是的操作const对象成为可能。(当操作对象是const时优先调用const成员函数,相当于重载)

                这是编写高效代码的关键,因为改善程序效率的根本办法是pass by reference-to-const

                (也就是传入一个const修饰的引用)

            关于下面的class

            class TextBlock

            {

            public:

                const char& operator[](std::size_t position) const

                { return text[position];}

                char& operator[]((std::size_t position)

                { return text[position];}

            private:

                std::string text;

            {;

            

            const成员函数可以控制const对象operator[]操作返回的值是const属性的

            TextBlock tb("Hello");

            const TextBlock ctb("World");

            

            tb[0]='x'; //对的,tbnon_const对象,调用non_const版本的成员函数,返回值可以赋值

            ctb[0]='x'; //错,ctbconst对象 operator[]操作调用const成员函数

                        //返回const类型值所以无法完成赋值操作

            

            如果去掉const成员函数,那么const类型的对象返回的也是 可以修改的返回值。

            如果去掉non_const成员函数,那么不管是不是const类型的对象,返回的都是不能修改的 返回值.

         */

        

        

        

        

        

        

        

    }




















  • 相关阅读:
    通过path绘制点击区域
    能添加图标的label
    便利的初始化view以及设置tag值
    递归搜寻NSString中重复的文本
    自动移除的通知中心
    BadgeValueView
    SpringCloud的入门学习之Eureka(Eureka的单节点)
    Elasticsearch 6.x版本全文检索学习之分布式特性介绍
    关于window10更新之后,15.5版本虚拟机不能使用的情况:检测更新版本
    RabbitMQ的消息确认ACK机制
  • 原文地址:https://www.cnblogs.com/boydfd/p/4983162.html
Copyright © 2011-2022 走看看