c++ const 用法
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 用法的更多相关文章
- c++ const用法小结
const用法 1,定义全局变量的内存分配问题 #define Pi_1 3.14 //使用#define宏 const double Pi_2 = 3.14 //使用const ...
- const用法
一.const作用 二.const用法 1.修饰一般常量 修饰符const可以用在类型说明符前,也可以用在类型说明符后. 例如: ; ; 2.修饰常数组 修饰符const可以用在类型说明符前,也 ...
- 【转】话说C语言const用法
原文:话说C语言const用法 const在C语言中算是一个比较新的描述符,我们称之为常量修饰符,意即其所修饰的对象为常量(immutable). 我们来分情况看语法上它该如何被使用. 1.函数体内修 ...
- static 与单例模式、auto_ptr与单例模式、const 用法小结、mutable修饰符
一.static 与单例模式 单例模式也就是简单的一种设计模式,它需要: 保证一个类只有一个实例,并提供一个全局访问点 禁止拷贝 C++ Code 1 2 3 4 5 6 7 8 9 10 11 ...
- const用法详解(转)
http://www.cnblogs.com/StudyRush/archive/2010/10/06/1844690.html 面向对象是C++的重要特性. 但是c++在c的基础上新增加的几点优化也 ...
- C++之常指针,指针常量,函数指针,const用法总结
1.const char *p,char const *p,char * const p 对于C++而言,没有const * 修饰符,所以,const只可以修饰类型或者变量名.因而const char ...
- C++的那些事:const用法面面观
一.const是什么 在 C/C++ 语言中,const关键字是一种修饰符.所谓“修饰符”,就是在编译器进行编译的过程中,给编译器一些“要求”或“提示”,但修饰符本身,并不产生任何实际代码.就 con ...
- 【三支火把】---C语言const用法总结
C语言关键字const相信对于不少C语言新手是既陌生又熟悉的,好像经常见,但是却不知道为何用,怎么用?学习至此,总结一下const的用法,使用程序来帮助你理解该关键字,希望能帮到像我一样的新手. 我看 ...
- typedef,static,const用法
一.typedef主要功能是定义一个已存在类型的别名,但是和宏并存 宏与typedef区别 1.宏定义只是简单的字符串替换 2.typedef定义的类型是类型的别名,typedef后面是一个整体声明, ...
- C++中const用法详解
本文主要内容来自CSDN论坛: http://bbs.csdn.net/topics/310007610 我做了下面几点补充. 补充: 1. 用const声明全局变量时, 该变量仅在本文件内可见, 类 ...
随机推荐
- 计时器 GC垃圾回收 demo
计时器: public void start() { //定义计时器 Timer timer=new Timer(); //定义运行间隔(数字越小,速度越快) int interval=30; //创 ...
- Linux基础教程 linux下cat 命令使用详解
cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1.命令格式: cat [选项] [文件] ...
- PHP基础教程 10款人气暴涨的PHP开源工具
若想创建动态而又新颖的Web应用程序,PHP便是理想的选择.不用说,在Web开发世界里,PHP是最流行的语言之一.一些非常好用的PHP开源工具着实拯救了不少开发任务繁重的PHP开发 人员,减轻他们的开 ...
- pluginManagement的坑
想用protobuf-maven-plugin插件,用了<pluginManagement/>标签包裹<plugin/>,就引不进来,去掉就可以引进来.需要研究下. <b ...
- 手写ORM
利用ORM把mysql中的数据封装成对象,通过对象点语法来获取mysql中的数据,所以自己手写一个ORM,方便我们操作数据 一.ORM:对象关系映射 类 >>> 数据库的一张表 对象 ...
- BZOJ 1022 Luogu P4279 [SHOI2008]小约翰的游戏 (博弈论)
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1022 (luogu) https://www.luogu.org/pro ...
- HDU3465--Life is a Line(树状数组求逆序数,离散化)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submission(s ...
- [CSP-S模拟测试]:括号密码(贪心)
题目描述 在“无限神机”的核心上,有一个奇怪的括号密码,密码初始已经有一个括号序列,有$n$个限制条件,每个限制条件描述为$l_i$和$r_i$,表示区间$[l_i,r_i]$的括号序列必须合法.调整 ...
- excel里面匹配部分字符的问题
如上图所示,有两个表,前者存的是区号电话号连起来的电话号,后者存的是世界各地的区号,怎么把第一个表里分成两列,一列单独存区号,一列单独存电话号. ps:电话号码长度和区号长度都 ...
- node.js npm 操作 模块化开发 cnpm镜像安装
模块(包) 传统引入 js 的缺点 整个网页,我们写了一个 js 文件,所有的特效都在里面 耦合度太高,代码之间关联性太强,不便于后期维护 变量容易 全局污染 如果将 复杂的 js 文件,拆成多个功能 ...