[C++]const修饰符
Date:
2014-1-1
Summary:
const 修饰符笔记
Contents:
1.const 修饰符
声明一个常量数据类型 , 在编译时就确定数据类型
2.const 与 指针
一般情况会有两种: const 在 *的左边或者右边
(1)const 在 * 左边
则无法通过该指针修改其指向的内存的值
ex:
int num = 10;
const int* p = #
//如果(*p)++ ,则编译器报错
(2)const 在*右边
则无法让该指针指向其他内存空间
int num1 = 10;
int num2 = 20;
int* const p = &num1;
//如果 p = &num2,则编译器报错,但是可以(*p)++
3.const 与函数参数
尽量把函数的形参声明为const指针,这样的好处:
(1)函数的实参可以使用const指针和非const指针,否则函数不接受const指针
(2)函数内部不能修改const指针指向的数据,避免函数内部污染数据
Notes:
Nothing Here
Sample:
/**
* 普通方法
*
* @param nNum1 nNum1 description
* @param nNum2 nNum2 description
*
* @return return value description
*/
int add1(int nNum1,int nNum2)
{
return nNum1 + nNum2;
} /**
* 形参为 非const指针
*
* @param pNum1 pNum1 description
* @param pNum2 pNum2 description
*
* @return return value description
*/
int add2(int* pNum1,int* pNum2)
{
return (*pNum1) + (*pNum2);
} /**
* 形参为 const指针
*
* @param pNum1 pNum1 description
* @param pNum2 pNum2 description
*
* @return return value description
*/
int add3(const int* pNum1,const int* pNum2)
{
return (*pNum1) + (*pNum2);
} int main(int argc, const char * argv[])
{ // insert code here...
std::cout << "Hello, World!\n"; cout << "test 1 start." << endl; int num1 = ;
int num2 = ;
int* p1 = &num1; cout << "num1 : " << num1 << "\n" << "pNum1 : " << (*p1) << endl;
cout << "add self by pointer :" << endl; (*p1)+=; cout << "num1:"<< num1<< endl;
cout << "use const pointer \n\n\n" << endl; const int* p2 = &num2;
p1 = &num2;
(*p1)++;
// (*p2)++; //note:编译器报错,不能修改num2内存中得值
p2 = &num1; //note:p2的指可以被修改,即可以指向其他内存空间 int* const p3 = &num1;
(*p3)++;
// p3 = &num2; // note:编译器报错,不能修改p3的值,即永远指向num1的内存空间 cout << "test 2 start." << endl;
cout << "call [add1] method :" << add1(num1,num2) << endl; // 使用非const的指针作为实参
cout << "call [add2] method :" << add2(p1,p1) << endl; // 使用const的指针作为实参,编译报错
// cout << "call [add2] method :" << add2(p1,p2) << endl; // 在add3,由于形参的指针被const修饰,则实参可以接受 const指针 和 非const指针
cout << "call [add3] method :" << add3(p1,p2) << endl; return ;
}
THE END
[C++]const修饰符的更多相关文章
- C++中 容易忽视的const 修饰符
C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行 ...
- [Reprint]C++函数前和函数后加const修饰符区别
c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...
- C++函数前和函数后加const修饰符区别
class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...
- C/C++ 中 const 修饰符用法总结
C/C++ 中 const 修饰符用法总结 在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家 ...
- const修饰符与函数
一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为 ...
- const修饰符限定的常量
类型前加const修饰符限定变量为只读,称为常量,定义时必须初始化,且初始化后编译器不允许再修改常量的值. 一.常量的定义 const在类型前面 const int value: //value是co ...
- [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结
在这篇文章中,我总结了一些C/C++语言中的 const 修饰符的常见用法,供大家参考. const 的用法,也是技术性面试中常见的基础问题,希望能够帮大家梳理一下知识,给大家一点点帮助.作者是菜鸟一 ...
- 转载----C/C++ 中 const 修饰符用法总结
感谢原创作者,写的好详细.不忍错过,所以转载过来了... 原文地址: https://www.cnblogs.com/icemoon1987/p/3320326.html 在这篇文章中,我总结了一些C ...
- C++ c++与C语言的区别(三目运算符,const修饰符)
//区别⑦:三目运算符(C++版本) #include<iostream> using namespace std; //三目运算符 C语言返回变量的值 C++语言是返回变量本身 void ...
随机推荐
- Struts2 学习笔记17 I18N国际化
讲解一下国际化的内容,比如书有些大的网站可以一键切换语言,例如中英切换,这时候就会用到国际化.但是由于struts2大多数是用来写后台,国际化并不是十分重要,而且用国际化开发会减慢开发的速度,大家只要 ...
- [置顶] CF 86D Powerful array 分块算法入门,n*sqrt(n)
简介:分块算法主要是把区间划分成sqrt(n)块,从而降低暴力的复杂度, 其实这算是一种优化的暴力吧,复杂度O(n*sqrt(n)) 题意:给定一个数列:a[i] (1<= i <= ...
- [置顶] Oracle 11g ASM:如何在 ASMCMD 命令行工具中创建 Oracle ACFS 文件系统
实验环境:Oracle 11g R2 RAC (11.2.0.3.5) Oracle Enterprise Linux 5.6 x86 1.创建 ASM 磁盘组 在两节点 ...
- 编译kernel:配置
韦东山Linux视频第1期_裸板_UBoot_文件系统_驱动初步\第10课第2节 内核启动流程分析之配置.WMV 下面以DM9000的配置为例: 在一个编译好的内核代码里,寻找CONFIG_DM900 ...
- BZOJ 3314: [Usaco2013 Nov]Crowded Cows( 单调队列 )
从左到右扫一遍, 维护一个单调不递减队列. 然后再从右往左重复一遍然后就可以统计答案了. ------------------------------------------------------- ...
- DelphiXE8怎么使用调试模式(朱建强)
需求:在开发Android程序时,大家一直是使用ShowMessage.其实XE是支持下断点的. 操作: 1.小米手机用USB线,连到电脑上. 2.小米手机-设置-关于手机-"MIUI版本& ...
- ORA-01092 ORA-12432: LBAC error: zllegnp:OCIStmtExecute 故障一例
最近由于数据库hang住,无奈之下直接干掉了pmon进程,再次启动的时候收到了ORA-01092: ORACLE instance terminated. Disconnection forced以及 ...
- jquery mobile左右滑动切换页面
jquery mobile左右滑动切换页面 $(function() {$("body").bind('swiperight', function() { $.mobile.ch ...
- Netty源代码学习——ChannelPipeline模型分析
參考Netty API io.netty.channel.ChannelPipeline A list of ChannelHandlers which handles or intercepts i ...
- android 播放音乐-进度条
今天学渣研究了一下使用MediaPlayer播放音乐时加入进度条,进度条如今用的是android自带的seekbar,后期会跟换UI的,在之前可以播放音乐的基础上,如今加入的主要功能有两个: 1实时显 ...