本文记录了C++中的const关键字的内容,分为3个部分,const和define的区别,const的作用,const的使用。


const和define的区别


const的作用

  1. const用于定义常量:编译器可以进行静态数据类型的安全检查。
  2. const修饰函数形式参数:当参数为自定义类型或抽象数据类型时,应该将“值传递”改为“const &传递”,可以提高效率,如下:

    void fun(A a);效率低,函数体内产生A类型的临时对象用于复制参数a,临时对象的构造、复制、析构过程将消耗时间。

    void fun(A const &a);效率极高。引用,不会产生临时对象,节省了时间,但是光引用有可能改变a的值,所以加const

  3. const修饰函数的返回值:如,给“指针传递”的函数返回值加const,则返回值不能被直接修改,且这个返回值只能被赋值给加 const修饰的同类型指针。如下:

    const char *GetChar(){}

    char *ch = GetChar();//error

    const char *ch = GetChar();//correct

  4. const修饰类的成员函数(函数定义体):任何不会修改数据成员的函数都应该用const修饰,这样,当不小心修改了数据成员或调用了非const成员函数时,编译器会报错。 int GetChar(void) const;

实例代码:

小结:在类成员函数的声明和定义中,const的函数不能对其数据成员进行修改操作。const的对象,不能引用非const的成员函数。


const的使用


C++ const && define的更多相关文章

  1. const & define & inline

    0x01  const & define区别 宏定义#define发生在预编译期,而const,enum定义的常量发生在编译期,两者的重要差别在于编译期里的变量是进符号表的,而预编译期的宏是简 ...

  2. const define static extern

    const const意味着"只读",欲阻止一个变量被改变,可以使用const关键字 const仅仅用来修饰右边的变量(基本数据变量p,指针变量*p) define #define ...

  3. php const define 区别有那些呢?

    (1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有 ...

  4. const define 定义常量的区别

    1.用const定义常量在编译的时候,提供了类型安全检查,而define 只是简单地进行字符串的替换 2.const定义的常量,会分配相应的内存空间.而define没有分配空间,只是在程序中与处理的时 ...

  5. PHP 中 const define 的区别

    在php中定义常量时,可用到const与define这两种方法,那他们到底有什么区别呢? 1.const用于类成员变量的定义,一经定义,不可修改.define不可用于类成员变量的定义,可用于全局常量. ...

  6. Const #define

    (1) 指针本身是常量不可变 (char*) const pContent;const (char*) pContent; (2) 指针所指向的内容是常量不可变 const (char) *pCont ...

  7. const define static extern 关键词详解

    const const关键词并不能把一个变量变成一个常量, 在符号前加上const表示这个符号不能被赋值, 即他的值对这个符号来说是只读的, 但并不代表这个值不能用其他方法去改变. 通过下面的例子就能 ...

  8. const define区别

    可以使用defined()----检测常量是否设置 [问]在php中定义常量时,const与define的区别? [答]使用const使得代码简单易读,const本身就是一个语言结构,而define是 ...

  9. iOS学习——#define、const、typedef的区别

    在iOS开发中经常遇到一些字段和类型的定义,例如配置生产和测试不同环境的参数等,这时候经常用到#define.const以及typedef.那么它们之间有什么区别呢?我们接下来一个一个具体了解下. 一 ...

随机推荐

  1. 王爽-汇编语言-综合研究四-不使用main函数编程

    (一) 研究目的 使用C语言编程,我们一定要使用main函数么? (二) 研究过程 1) 最初的程序 首先,我们编写一个不写main函数的C语言程序. 程序如下: 在编译的过程中,没有发现错误.在链接 ...

  2. jsp:软件包 javax.servlet 不存在

    jdk里面有javax.servlet和javax.servlet.http这两个包吗? JavaServlet程序运行还需要安装JDK以外的包吗...? why?我运行JavaServlet程序的时 ...

  3. Java File创建新目录和文件

    创建目录 当不存在目录aa文件夹时: File file1=new File("/aa"); Boolean aa=file.mkdir();// true File file1= ...

  4. mvc之文件下载

    首先你要有四张图片,也就是数组中的数 public ActionResult Index()//创建视图{ViewBag.list =new int[] { 5, 6, 7,8 };return Vi ...

  5. 【12-JDBC编程】

    JDBC编程 JDBC概述 •通过使用JDBC API,Java程序可以非常方便地操作各种主流数据库,这是使Java语言的巨大 魅力所在.而且由于Java语言的跨平台特性,所以使用JDBC API所编 ...

  6. Picard 法求方程根

    要点: 首先对于任何方程 :f(x)=0 ,可以转换成 f(x)+x-x => f(x)+x=x; 取g(x)=f(x)+x;  那么 新方程g(x)=x 的解即是 f(x)=0的解,即g(x) ...

  7. doxygen的使用(一)配置并生成文档

    原创文章,欢迎阅读,禁止转载. doxygen是个好用的文档生成工具,他的强大功能有很多介绍,我就不说了.自带的chm帮助手册很全面,包括功能.注释规范.怎么配置.工具用法等.doxygen的用法共3 ...

  8. iOS和Android测试区别

    1.      Android长按home键呼出应用列表和切换应用,然后右滑则终止应用: 2.      多分辨率测试,Android端20多种,ios较少: 3.      手机操作系统,Andro ...

  9. allegro中焊盘的设置

    用Cadence的pad designer制作pad的时候会遇到为thermal relief和anti pad设计尺寸的问题 Thermal relief:正规的中文翻译应该叫做防散热PAD.它主要 ...

  10. [UCSD白板题] Greatest Common Divisor

    Problem Introduction The greatest common divisor \(GCD(a, b)\) of two non-negative integers \(a\) an ...