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声明全局变量时, 该变量仅在本文件内可见, 类 ...
随机推荐
- javascript(腾讯)
var a={key:"1",value:2}; war b=a; b.value+=a.key, 打印b.value是多少,a.value呢? 答案:都是21.因为javascr ...
- mysql——二级索引(辅助索引)
二级索引:叶子节点中存储主键值,每次查找数据时,根据索引找到叶子节点中的主键值,根据主键值再到聚簇索引中得到完整的一行记录. 问题: 1.相比于叶子节点中存储行指针,二级索引存储主键值会占用更多的空间 ...
- git 清除缓存
清除git缓存 git config --local --unset credential.helper git config --global --unset credential.helper g ...
- 使用webuploader组件实现大文件分片上传,断点续传
本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...
- 2019hdu多校 AND Minimum Spanning Tree
题目链接:Click here 题目大意:两个点之间的边权为编号按位与的值,求最小生成树,方案要字典序最小 Solution: 一道不难的构造题,每个点连向他取反后的lowbit值,这样边权为0,若l ...
- 启动Maven项目时报错Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project **-web: Failed to clean project: Failed to delete E:\**\target\tomcat\logs\access_lo
这类错误 出现这种错误,通常是由于您已启动了另一个tomcat 进程或者运行的javaw.exe进程,导致报错. 解决方法: 1. 鼠标点击 X 进行关闭运行失败的 Console页,(如果运行多次, ...
- 第十一周java学习总结
目录 第十一周java学习总结 学习内容 学习总结 提交代码截图 代码推送 第十一周java学习总结 学习内容 第13章 Java网络编程 主要内容 URL类 InetAdress类 套接字 UDP数 ...
- 数据库MySQL(课下作业,必做) 20175225
作业要求: 1.下载附件中的world.sql.zip, 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECDB,导入world.sql,提交导入成功 ...
- java中的null类型---有关null的9件事
摘自 https://blog.csdn.net/qq_25077777/article/details/80174763 今天听到一个问题,java中的null类型,null竟然是一种类型 java ...
- @清晰掉 makefile
参阅: http://www.cnblogs.com/wang_yb/p/3990952.html