如果你一看见C++中const就脱口而出:“常量!”那只能说明你对c++不甚了解。或者说你太2了.

const得一些使用方法与场景如下:

1:const修饰普通变量,全局变量,静态变量

 const int iTmp = ;
int const iTmpEx = ;

变量保持其原有属性,只是多了一个const,只读属性。

这里,const到底是紧贴变量名还是类型说明符号(int)都无关紧要。在修饰指针时候得不同在后面会详细说明.

2:const修饰指针

const 修饰指针有三种情况

 //A: 指针指向内容不能修改,指针本身可以修改。
char chBuffer[] = "test";
const char *pName = chBuffer;
pName++;
cout<<pName<<endl();
//*pName = 'c'; 非法,指针指向的内容不能被修改
 //B: 指针指向内容能修改,指针本身不可以修改。
char chBuffer[] = "test";
char * const pName = chBuffer;
//pName++; 非法,指针本身不能被修改
*pName = 'c'; //内容可以被修改
cout<<pName<<endl();
 //C: 指针指向内容不能修改,指针本身不可以修改。
char chBuffer[] = "test";
const char * const pName = chBuffer;
//pName++; 非法,指针本身不能被修改
//*pName = 'c'; //非法 内容不可以被修改
cout<<pName<<endl();

写法,比如:const char *pTmp =chBuffer;

等同于 char const *pTmp = chBuffer;

另外

char* const pTmp = chBuffer;

其实,只要看const离哪个近些。 const离pTmp最近,说明它是在修饰指针变量pTmp,表示pTmp不能改变,即不能做pTmp++这种修改pTmp指针的操作。

而 const char* const pTmp = chBuffer;则表示了指针和它指向的内容你都不能做修改。

3:const修饰函数参数

void Test(const int iAge)//函数体中,确保iAge不被修改。
void Test(const char *pName)//函数体中,确保pName指向的内容不被修改。
void Test(char* const pName)//函数体中,确保pName不被修改。
void Test(const char* const pName)//函数体中,确保pName和pName指向的内容不被修改。
void Test(const ClassTest &obj);// 这种情况使用非常多,这样可以避免调用ClassTest的构造函数,直接传递类对象的地址。

4:const修饰函数返回值

const 修饰返回值的用法比较少见,有种用法,比如

const char* Test();

那么接受它返回内容的变量也要写成const char *pRes;

5:const修饰类成员变量

修饰类成员变量时候,初始化需要放到类初始化列表种进行初始化

class CTest{

public:
int m_iAge;
} CTest::CTest:m_iAge(){
}

6. const修饰成员函数

class CTest{

public:
void Show()const;
private:
int m_iAge;
} void CTest:: Show()const{
cout<<m_iAge;
// m_iAge++; 不能修改
}

对变量的只读访问,只是类普通变量,排除全局,静态变量。

C++ 中 const 使用的更多相关文章

  1. C、C++中const的区别

    C语言中: 被const修饰的变量,仍然是变量.虽然不能用C语法给这个变量改变值,但他本质上还是变量. C编译器会给它分配空间. C中,const默认使用的是外部链接. C++中: 被const修饰的 ...

  2. JavaScript中const、var和let区别浅析

    在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始 ...

  3. C/C++中const的用法 分类: C/C++ 2015-07-05 00:43 85人阅读 评论(0) 收藏

    const是C语言的关键字,经C++进行扩充,变得功能强大,用法复杂.const用于定义一个常变量(只读变量),当const与指针,引用,函数等结合起来使用时,情况会变得复杂的多.下面将从五个方面总结 ...

  4. C++中const 的各种用法

    C++中const 关键字的用法 const修饰变量 const 主要用于把一个对象转换成一个常量,例如: ; size = ; // error: assignment of read-only v ...

  5. (转) C/C++中const关键字详解

    文章转自  http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维 ...

  6. 实例讲述PHP面向对象的特性;;;php中const与define的使用区别

    php中const与define的使用区别 1.const:类成员变量定义,一旦定义且不能改变其值. define:定义全局常量,在任何地方都可以访问.2.define:不能在类中定义,而const可 ...

  7. C++中const简介及用法

    1.const简介 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C++中常用的类型修饰 ...

  8. C/C++ 中 const 修饰符用法总结

    C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...

  9. C++中const用法详解

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

  10. C++ 中 const和define的区别

    来源网址:http://wujiangping.blog.163.com/blog/static/195182011201255115125205/ 请区别用#define命令定义的符号常量和用con ...

随机推荐

  1. CodeForces - 156D:Clues(矩阵树定理&并查集)

    题意:给定N点,M边,求添加最少的边使之变为连通图的方案数. 思路:注意题目给出的M边可能带环,即最后生成的不一定是一棵树.但是影响不大.根据矩阵树定理,我们知道生成树的数量=N^(N-2),即点数^ ...

  2. [独孤九剑]Oracle知识点梳理(一)表空间、用户

    本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracl ...

  3. 二、python沉淀之路~~字符串属性(str)

    1.capitalize的用法:即将输出字符串首字母大写 test = "heLLo" v = test.capitalize() print(v) 结果:Hello. 2.cas ...

  4. nodejs 不同请求获取前端传的参数

    get方法 参数在req.query中获取 router.get('/', function(req, res, next) { console.log("reqquery:",r ...

  5. Python函数-compile()

    compile(source, filename, mode[, flags[, dont_inherit]]) 作用: 将source编译为代码或者AST对象.代码对象能够通过exec语句来执行或者 ...

  6. python list和元祖

    一,元祖 在python中元祖是只能查询和读取的一组数据,在()内的赋值就是元祖,只有查询和读取的功能: 1.len()方法:查询元祖有多少个元素 s = (') print(len(s)) 结果: ...

  7. 蓝桥杯 算法训练 ALGO-141 P1102

    算法训练 P1102   时间限制:1.0s   内存限制:256.0MB 定义一个学生结构体类型student,包括4个字段,姓名.性别.年龄和成绩.然后在主函数中定义一个结构体数组(长度不超过10 ...

  8. SpringBoot自动化配置之一:SpringBoot内部的一些自动化配置原理

    springboot用来简化Spring框架带来的大量XML配置以及复杂的依赖管理,让开发人员可以更加关注业务逻辑的开发. 比如不使用springboot而使用SpringMVC作为web框架进行开发 ...

  9. Rails的静态资源管理(四)—— 生产环境的 Asset Pipeline

    官方文档:http://guides.ruby-china.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.h ...

  10. PowerDesigner CDM中取消默认不能存在同名主键的方法

    This data item is already used in a primary identifier.Normalization rules prevent ... 处理的方法为: 菜单栏上的 ...