1.  修饰一般变量,const int a = 10;  表示此变量不能被修改,简单易懂,不多说

2.  修饰指针,主要是下面三种

const int *cp1 = &a;       //修饰int,不能修改指针指向的内存的值,即a的值

int const *cp2 = &a;      //同上

int *const cp3 = &a;      //修饰*, 指针本身不能修改,即不能改变指针指向a还是b

助记:看const左边第一位,是什么类型就是修饰什么,左边没有找右边第一个

  int a = ;
int b = ;
std::cout << "a = " << a << std::endl;
std::cout << "b = " << b << std::endl; //
const int *cp1 = &a;
std::cout << "*cp1 = " << *cp1 << std::endl;
cp1 = &b; // 可以修改指针本身,即指向a还是b可以改
//*cp1 = 1111; //error, 修饰int,不能修改指针指向的内存的值,即a的值
std::cout << "after cp1=&b,*cp1 = " << *cp1 << std::endl; //2 the same as 1
int const *cp2 = &a;
std::cout << "*cp2 = " << *cp2 << std::endl;
cp2 = &b;
//*cp2 = 2222; //error
std::cout << "*after cp2=&b,*cp2 = " << *cp2 << std::endl; //
int *const cp3 = &a;
std::cout << "*cp3 = " << *cp3 << std::endl;
//cp3 = &b; //error, 修饰*, 指针本身不能修改,即不能改变指向a还是b
*cp3 = ; // 可以修改指针指向的内存的值,即a的值
std::cout << "after*cp3=3333,*cp3 = " << *cp3 << std::endl; std::cout << "a = " << a << std::endl;
std::cout << "b = " << b << std::endl;

3.  修饰类成员函数

const int setValue(const int value) const

从左到右,1. 返回值不能改

2. 参数不能改

3. 常函数,函数成员变量不能被修改,如需要更改,请在成员变量前加上mutable

class A
{
public:
A():m_a() ,m_b(){}
virtual ~A(){} public:
const int geta(){return m_a;} //返回值不能被修改
int setValue(const int value) const
{
//m_a = value; //error 函数后面有const,常函数,不能修改成员变量
m_b = value; // 如果要修改,需要加上mutable修饰成员变量
//value++; //error const 修饰函数参数,不能被修改
return value;
} private:
int m_a;
mutable int m_b;
};

个人总结:

实际应用中,一般用const来修饰自定义的复杂的数据结构或者类的指针或者引用,用以进行函数传参或者返回,避免传参时进行数据拷贝或者生成临时对象,影响程序性能,也常建议这么处理,尽量使用const 指针或者引用来处理传参, 尽量最大程度的获得编译器的优化。

对于一般的基础类型变量本身就是进行值传递时,意义不大。

c++ const 用法的更多相关文章

  1. c++ const用法小结

    const用法 1,定义全局变量的内存分配问题 #define  Pi_1  3.14       //使用#define宏 const double Pi_2 = 3.14    //使用const ...

  2. const用法

    一.const作用 二.const用法 1.修饰一般常量   修饰符const可以用在类型说明符前,也可以用在类型说明符后. 例如: ; ; 2.修饰常数组  修饰符const可以用在类型说明符前,也 ...

  3. 【转】话说C语言const用法

    原文:话说C语言const用法 const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修 ...

  4. static 与单例模式、auto_ptr与单例模式、const 用法小结、mutable修饰符

    一.static 与单例模式 单例模式也就是简单的一种设计模式,它需要: 保证一个类只有一个实例,并提供一个全局访问点 禁止拷贝  C++ Code  1 2 3 4 5 6 7 8 9 10 11 ...

  5. const用法详解(转)

    http://www.cnblogs.com/StudyRush/archive/2010/10/06/1844690.html 面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也 ...

  6. C++之常指针,指针常量,函数指针,const用法总结

    1.const char *p,char const *p,char * const p 对于C++而言,没有const * 修饰符,所以,const只可以修饰类型或者变量名.因而const char ...

  7. C++的那些事:const用法面面观

    一.const是什么 在 C/C++ 语言中,const关键字是一种修饰符.所谓“修饰符”,就是在编译器进行编译的过程中,给编译器一些“要求”或“提示”,但修饰符本身,并不产生任何实际代码.就 con ...

  8. 【三支火把】---C语言const用法总结

    C语言关键字const相信对于不少C语言新手是既陌生又熟悉的,好像经常见,但是却不知道为何用,怎么用?学习至此,总结一下const的用法,使用程序来帮助你理解该关键字,希望能帮到像我一样的新手. 我看 ...

  9. typedef,static,const用法

    一.typedef主要功能是定义一个已存在类型的别名,但是和宏并存 宏与typedef区别 1.宏定义只是简单的字符串替换 2.typedef定义的类型是类型的别名,typedef后面是一个整体声明, ...

  10. C++中const用法详解

    本文主要内容来自CSDN论坛: http://bbs.csdn.net/topics/310007610 我做了下面几点补充. 补充: 1. 用const声明全局变量时, 该变量仅在本文件内可见, 类 ...

随机推荐

  1. antd表格分页

    <Table bordered loading={loading} dataSource={list} pagination={{ showSizeChanger: true, total: d ...

  2. Linux入门培训教程 linux下拷贝cp删除rm移动mv命令参数以及说明

    拷贝移动删除在windows中看起来这么简单,但linux经常使用的文字界面,所以对于linux系统 下拷贝cp删除 rm 移动mv命令参数就不得不需要了解和学习了 cp 该命令的功能是将给出的文件或 ...

  3. Redis实战(十二)Redis实现分布式锁

    序言 SET my_key my_value NX PX milliseconds 资料 如何优雅地用Redis实现分布式锁?

  4. package.json文件

    http://javascript.ruanyifeng.com/nodejs/packagejson.html#toc7(copy) 通常我们使用npm init命令来创建一个npm程序时,会自动生 ...

  5. JMS学习四(ActiveMQ消息过滤)

    一.消息的选择器 不管是在消息发送端设置消息过期时间还是在接收端设置等待时间,都是对不满足的消息有过滤的作用,那消息选择器就是为过滤消息而生的下面来看看消息选择器: ActiveMQ提供了一种机制,使 ...

  6. sqli-lab(8)

    布尔型单引号GET盲注 发现加个单引号跟没加显示不一样,加了单引号连you are in都不显示了,没有报错,所以只能用盲注判断了 0X01爱之先了解 盲注需要掌握一些MySQL的相关函数:lengt ...

  7. JDBC API访问数据库的基本步骤。

    JDBC本质:官方定义了一套操作所有关系型数据库的规则(接口),各个数据库厂商实现这个接口,提供数据库驱动jar包. 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类. 任 ...

  8. PM项目跟进护航文档模板

    护航文档 版本需求列表 需求 开发责任人 MMDrawerController.GCDTimer.Speex_armv7s等11个库迁移 熊文杰 相关人员 职称 开发人员 开发 熊文杰 测试 xxx ...

  9. Docker容器技术入门

    独立容器分开的条件: 1.Namespace命名空间 1.主机名和域名,UTS 2.文件系统,mount 3.进程间通信,IPC 4.独立的进程树PID 5.独立的用户User 6.独立的IP地址tc ...

  10. Vue知识整理14:组件基础

    组件:可以复用的实例.使用 v-component来实现 2.通过props属性添加相应的属性,并且在模板中渲染 当模板中包含多个组件时,则需要用一个div来包裹起来.如下: 可以将原来的的点击事件, ...