zoukankan      html  css  js  c++  java
  • 1.尽量以const ,enum,inline替换define

    1.#define为预处理阶段命令

    原因:有可能记号名称没有进入记号表,而出现编译错误,即编译器并没看到过该定义。

    class专属常量const 一般定义为static,保证该常量至多有一份实体。

    枚举类型值可充当intS型使用。enum{num=3};现在num就是3的一个记号。

    对于取地址操作:const是合法的,但是enum和define不能进行取地址操作。

    #define定义函数宏的时候容易产生歧义。(括号分配等等,计算顺序。。)

    宏无法定义成private,但是内联函数inline可以定义成private inline。

    总结:对于单纯常量,做好以const,enum代替#define

    对于函数类型的宏定义,最好通过inline替代,因为内联函数可以很好地遵守作用域和访问规则。

    2。尽量在定义不变常量的时候用const.编译器会帮助强制执行这项约束。const可以用来修饰:常量(全局,局部),函数,文件,区块作用域中的static对象,指针等。。

    const修饰指针:const在*左边,表示被指物是常量,const出现在*右边,表示指针自身是常量。也可出现在*两边。

    左边:const char*ptr;等价于char const*ptr;常量指针,指向常量的指针。

    右边:指针常量,指向的那块东西不能变,但是东西的值是可以变的。

    常量const修饰函数:函数返回值为常量是可以避免用户操作错误而造成的意外。

    const成员函数:方便调用const变量。常量性不同的两个函数是可以被重载的,即是否有const修饰的两个函数,是不同的,类似于重载操作。

                const char& operator[](size_t p)const{...}

                char& operator[](size_t p2){..}

                 重载的两个不同的函数。。

    注意:当const与non-const成员函数有着本质相同的实现时(有一些重复的操作),用NON-CONST去调用const版本的函数可以避免代码重复。原因是const承诺不改变对象的逻辑状态,但是当你用const去调用非const的时候,非const并没承诺不改变对象的逻辑状态,这就造成错误。

  • 相关阅读:
    JavaScript——封装
    Vue.js——component(组件)
    MySQL数据库——安装教程(5.7版本)
    Vue.js——循环(Java、JSTL标签库、数据库)
    Vue.js——理解与创建使用
    JavaScript——闭包
    自定义最小索引优先队列
    自定义最大索引优先队列
    自定义最小优先队列
    自定义最大优先队列
  • 原文地址:https://www.cnblogs.com/8335IT/p/6662975.html
Copyright © 2011-2022 走看看