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修饰符的更多相关文章

  1. C++中 容易忽视的const 修饰符

    C++可以用const定义常量,也可以用#define定义常量,但是前者比后者有更多的有点: (1)const常量有数据类型,而宏常量没有数据类型.编译器可以对const进行类型安全检查,而后者只进行 ...

  2. [Reprint]C++函数前和函数后加const修饰符区别

    c++中关于const的用法有很多,const既可以修饰变量,也可以函数,不同的环境下,是有不同的含义.今天来讲讲const加在函数前和函数后面的区别.比如: 01 #include<iostr ...

  3. C++函数前和函数后加const修饰符区别

    class Test(){ public: Test(){} const int foo(int a); const int foo(int a) const; }; 一.概念 当const在函数名前 ...

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

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

  5. const修饰符与函数

    一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为 ...

  6. const修饰符限定的常量

    类型前加const修饰符限定变量为只读,称为常量,定义时必须初始化,且初始化后编译器不允许再修改常量的值. 一.常量的定义 const在类型前面 const int value: //value是co ...

  7. [原创] 基础中的基础(二):C/C++ 中 const 修饰符用法总结

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

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

    感谢原创作者,写的好详细.不忍错过,所以转载过来了... 原文地址: https://www.cnblogs.com/icemoon1987/p/3320326.html 在这篇文章中,我总结了一些C ...

  9. C++ c++与C语言的区别(三目运算符,const修饰符)

    //区别⑦:三目运算符(C++版本) #include<iostream> using namespace std; //三目运算符 C语言返回变量的值 C++语言是返回变量本身 void ...

随机推荐

  1. [zencart教程]zencart外贸建站仿站交流俱乐部

    [zencart教程]zencart外贸建站仿站交流俱乐部 1.你想自主一天仿做一个精美的zencart 外贸网站; 2.你想自已自主定制精美的psd 图 zencart模板,并把它变成自定义精美 z ...

  2. Javascript面向对象研究心得

    这段时间正好公司项目须要,须要改动fullcalendar日历插件,有机会深入插件源代码.正好利用这个机会,我也大致学习了下面JS的面向对象编程,感觉收获还是比較多的. 所以写了以下这篇文章希望跟大家 ...

  3. Oracle成长点点滴滴(3)— 权限管理

    上篇我们解说了创建用户以及主要的授权问题.以下我们来解说权限包含对象权限和系统权限. 事实上上节课我们解说就是系统的权限.系统权限就是一些创建表了,表空间等等的系统的权限. 1.      系统权限 ...

  4. Android bitmap序列化

    最近在开发中需要用到图片bitmap的序列化并进行传递,发现bitmap是没有序列化的,下面是自己实现的一个序列化方法,分享下. 以下是通过byte[]来进行序列化的,因为bitmap是没有序列化的, ...

  5. 网站遭遇DDOS简易处理

    网站遭遇DDOS攻击 netstat -an | grep ESTABLISHED 我们看到有大量的链接存在着,并且都是ESTABLISHED状态 for i in `netstat -an | gr ...

  6. CSDN高校俱乐部2013年秋季北京地区第一站“编程语言的应用及其发展”—北京联合大学

    2013年12月11日晚17:00.CSDN高校俱乐2013年秋季北京地区第一站“编程语言的应用及其发展”在北京联合大学进行. 首先,CSDN总部人员介绍CSDN俱乐部的改版以及线上编程挑战赛.CSD ...

  7. 【C语言】超大数乘法运算

    昨天做排列组合的时候遇到A(a,b)这个问题,需要计算A(20,20)超大,计算机32位的,最大数只能是2^32,这让我很悲伤! 于是乎就自己研究了如何进行超大数的计算! /************* ...

  8. 浅谈BFC与应用

    什么是BFC BFC(Block formatting context)的中文翻译我们一般叫做块级格式化上下文.它是一个独立渲染的区域,规定了内部如何布局,同时不受外界的影响.我们的根元素本身就是一个 ...

  9. Delphi中拖动无边框窗口的5种方法

    1.MouseMove事件中加入: // ReleaseCapture;// Perform(WM_SYSCOMMAND, $F017 , 0); 2.MouseDown事件中加入: // POSTM ...

  10. Decoding BASE64 in ABAP

    Code Gallery Decoding BASE64 in ABAP Skip to end of metadata Created by Frank Klausner, last modifie ...