C++ 中 const 使用
如果你一看见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 使用的更多相关文章
- C、C++中const的区别
C语言中: 被const修饰的变量,仍然是变量.虽然不能用C语法给这个变量改变值,但他本质上还是变量. C编译器会给它分配空间. C中,const默认使用的是外部链接. C++中: 被const修饰的 ...
- JavaScript中const、var和let区别浅析
在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始 ...
- C/C++中const的用法 分类: C/C++ 2015-07-05 00:43 85人阅读 评论(0) 收藏
const是C语言的关键字,经C++进行扩充,变得功能强大,用法复杂.const用于定义一个常变量(只读变量),当const与指针,引用,函数等结合起来使用时,情况会变得复杂的多.下面将从五个方面总结 ...
- C++中const 的各种用法
C++中const 关键字的用法 const修饰变量 const 主要用于把一个对象转换成一个常量,例如: ; size = ; // error: assignment of read-only v ...
- (转) C/C++中const关键字详解
文章转自 http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维 ...
- 实例讲述PHP面向对象的特性;;;php中const与define的使用区别
php中const与define的使用区别 1.const:类成员变量定义,一旦定义且不能改变其值. define:定义全局常量,在任何地方都可以访问.2.define:不能在类中定义,而const可 ...
- C++中const简介及用法
1.const简介 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C++中常用的类型修饰 ...
- C/C++ 中 const 修饰符用法总结
C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...
- C++中const用法详解
本文主要内容来自CSDN论坛: http://bbs.csdn.net/topics/310007610 我做了下面几点补充. 补充: 1. 用const声明全局变量时, 该变量仅在本文件内可见, 类 ...
- C++ 中 const和define的区别
来源网址:http://wujiangping.blog.163.com/blog/static/195182011201255115125205/ 请区别用#define命令定义的符号常量和用con ...
随机推荐
- ElasticSearch_学习_01_单实例安装与分布式安装
一.前言 二.下载 1.下载地址 https://www.elastic.co/downloads/past-releases 三.单实例安装 直接解压,window下运行 elasticsearch ...
- 16_游戏编程模式ServiceLocator 服务定位
####简单说,就是某个系统作为一个服务,对全局系统可见. Service Locator (服务定位) ``` //简单粗暴的代码, 使用声音系统 // Use a static class? Au ...
- OpenCV 2.4.9 +VS2013 开发环境配置
OpenCV 的全称是:Open Source Computer Vision Library.OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和Mac O ...
- Jenkins之构建触发器配置(转载)
构建触发器配置,当你在文本框中输入配置的时间后,文本框下方会有时间解释,这样可以很好的看到自己配置的时间对不对. 可以清晰看到我的配置第一个运行时间是周五上午10点执行,第二次是星期六上午10点. ...
- 小组项目需求——NABCD
关于项目微食堂的NABCD: N(need): 就我自己而言,每天在上午三四节课时就会想中午吃什么.而且大部分的课在二教,离食堂较远.可能会面临“抢不到饭”的问题.首先不知道去哪吃.吃什么,尤其在时间 ...
- Too Rich(贪心加搜索)
个人心得:10月份月赛题目,很low,就过了一道水题而且是把所有猜测都提交才过的.这段时间不知道忙什么去了, 也没怎么刷题感觉自己越来越差,还不如新来的大一学弟呢,别人起码天天刷代码到半夜,比起刚在区 ...
- LeetCode 323. Number of Connected Components in an Undirected Graph
原题链接在这里:https://leetcode.com/problems/number-of-connected-components-in-an-undirected-graph/ 题目: Giv ...
- angular的$q,defer,promise
$q是Angular的一种内置服务,它可以使你异步地执行函数,并且当函数执行完成时它允许你使用函数的返回值(或异常). 官网:http://docs.angularjs.cn/api/ng/servi ...
- djangocms安装使用指南
ubuntu 14.04 virtualenv venv --python=python3 . venv/bin/activate sudo apt-get upgradesudo apt-get i ...
- Azure上Linux VM误配防火墙的恢复方法
在实际运维中,防火墙把自己挡在机器外面的情况会时有发生.如何快速的恢复对运维人员是很重要的. 本文将介绍如何用Azure Extension实现不通过ssh对VM进行操作的方法. 之前写过一遍Blog ...