C++ const && define

本文记录了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

时间: 2024-12-28 23:39:28

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

Const #define

(1) 指针本身是常量不可变 (char*) const pContent;const (char*) pContent; (2) 指针所指向的内容是常量不可变 const (char) *pContent;(char) const *pContent; (3) 两者都不可变 const char* const pContent; 还有其中区别方法: 沿着*号划一条线, 如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量: 如果const位于*的右侧,cons

const define static extern 关键词详解

const const关键词并不能把一个变量变成一个常量, 在符号前加上const表示这个符号不能被赋值, 即他的值对这个符号来说是只读的, 但并不代表这个值不能用其他方法去改变. 通过下面的例子就能比较好理解, int i = 5;const int *a = &i;*a = 8;   //报错, 只读不能赋值i = 10;   //ok 平常我们见得多的const用法有如下几种,似乎可以总结为“就近原则”:即const最靠近其右边哪个变量,就说明那个变量为常量.” const int *p1

PHP 中 const define 的区别

在php中定义常量时,可用到const与define这两种方法,那他们到底有什么区别呢? 1.const用于类成员变量的定义,一经定义,不可修改.define不可用于类成员变量的定义,可用于全局常量. 2.const可在类中使用,define不能. 3.const不能在条件语句中定义常量. 4.const只能接受静态的标量,而define可采用任何的表达式. 5.const定义的常量时大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感. 6.const

typedef 自定义 const define

typedef list<CNewParRange> ParList; const CString C_Pos_Start_Completion[] = { _T("M2208"), _T("M2240"), _T("M2272"), _T("M2304"), _T("M2336"), _T("M2368"), _T("M2400"), _T("

thinkphp笔记

thinkphp 笔记TP框架:1.模板引擎2.MVC设计模式3.常用操作类 模板引擎和框架区别:1.模板引擎只是框架中用来做php和html分离的 MVC设计模式:M 数据模型V 视图C 控制器 V(HTML模板) --smarty()--> C(PHP逻辑控制) ->M(Model类表操作) localhost/test/index.php/模块/操作localhost/test/index.php/Index/add 目录结构ThinkPHP.php 框架入口文件Common 框架公共文

于Linux-2.6.32内核上编译ipset-6.23的坎坷经历

新版本的ipset 上周在儿童医院给小小看病等待叫号的间隙,收到了Netfilter邮件列表的推送消息,一览了ipset最新的6.23版本的新特性,很多正是我目前所需要的,特别是timeout和skbinfo参数的支持,具体的详情请自行查看manual,如果不想看那么多,我这里简单的贴一下:    timeout       All  set  types  supports the optional timeout parameter when creating a set and addin

【STL学习】sort函数之自定义结构体数组

最近经常用到结构体数组排序,所以把用sort对结构体数组排序整理一下. #include<iostream> #include<algorithm>//需要加该头文件 using namespace std; struct define{ int a; int b; }d[10]; bool compare(const define &x,const define &y); int main() { for(int i=0;i<10;i++){ cin>

贪吃蛇!!!

估计没几个人会想到研究性学习搞加各种特效的贪吃蛇的吧 把这几周搞研究性学习的结果记录一下 1.0:学会了用canvas画布画出好烂好烂的贪吃蛇界面……而且仅仅是界面……不过初学者嘛……不要在意这些细节 1 <!doctype html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>crazy_SNAKE</title> 6 <style type=&

MFC 六大机制 (2) RTTI(运行时类型识别)

RTTI(Runtime Type Identification,运行时类型识别) 程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.MFC 早在编译器支持 RTTI 之前,就具有了这项能力.承接上一章,我们现在要在 Console 程序中将 RTTI 仿真出来.我希望我的类库具备 IsKindOf() 的能力,能够在执行器检查某个对象是否"属于某种类",并传回 TRUE 或 FALSE.为了更直观地查看结果,我在 IsKindOf() 中加入了输出,使其达到如