转载:const放在函数前后的区别

一、const修饰指针

int b = 500;

1、const int * a = & b;

2、int const * a = & b;

3、int * const a = & b;

4、const int * const a = & b;

对于1和2

const 放在*左侧,就是用来修饰指针所指向的变量,即指针指向的是常量。

若a是仓库管理员,b是仓库。即仓库中的货物(*a)不允许改变。但是可修改指针指向或b的值来改变*a。

对于3

const放在*的右侧,表示管理的仓库不可改变,只能是那一个,但是仓库中的货物(*a)可以改变。同时定义时必须初始化。

对于4

表示指针本身和指向的内容均为常量。

二、放在函数前后区别

1、int GetY() const;

2、const int * GetPosition();

对于1

该函数为只读函数,不允许修改其中的数据成员的值。

对于2

修饰的是返回值,表示返回的是指针所指向值是常量。

三、深入理解const

const对象只能调用const成员函数;const对象的值不能被修改,在const成员函数中修改const对象数据成员的值是语法错误;在const函数中调用非const成员函数是语法错误。

在一个类的函数后面加上const后,就表明这个函数是不能改变类的成员变量。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。
class Stack
{
  public:
void  Push(int elem);
int  Pop(void);
int GetCount(void)  const; // const成员函数
  private:
int m_num;
int m_data[100];
};
int Stack::GetCount(void)  const
{
++ m_num; // 编译错误,企图修改数据成员m_num
Pop(); // 编译错误,企图调用非const函数
return m_num;
}
const成员函数的声明看起来怪怪的:const关键字只能放在函数声明的尾部,大概是因为其它地方都已经被占用了。

--------------------- 本文来自 ranyongqing 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/ranyongqing/article/details/25594795?utm_source=copy
————————————————
版权声明:本文为CSDN博主「wangtingze123」的原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wangtingze123/article/details/82867173

const放在函数前后的区别的更多相关文章

  1. const 放在函数后

    const 放在函数后表示这个函数是常成员函数, 常成员函数是不能改变成员变量值的函数.const 限定符,它把一个对象转换成一个常量.举例:为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数 ...

  2. const放在函数前和函数后

    class c { public: returnType functionName (parameter list) const; //这个函数不会修改类成员 const returnType fun ...

  3. const放在函数前和放在函数后

    template < class T, class container = vector<T> > class MyClass{ private: T value; publi ...

  4. C++ 基础 const放在函数末尾的意思

  5. const 修饰函数

    At the very first ,I got a problem . Vector Vector::operator+(const Vector &v)const{ return Vect ...

  6. c++ 学习之const专题之const成员函数

    一些成员函数改变对象,一些成员函数不改变对象. 例如: int Point::GetY() { return yVal; } 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象: ...

  7. C++ Const成员函数

    一些成员函数改变对象,一些成员函数不改变对象. 例如:  int Point::GetY() { return yVal; }  这个函数被调用时,不改变Point对象,而下面的函数改变Point对象 ...

  8. C++中const在函数中的用法

    1.const放在函数前面 如果我们的函数的返回值是以 指针形式 返回的,如果在函数前面加上const修饰,则表示指针指向的内容是不能被改变的,并且接收返回值的 指针变量必须是const修饰的,例如: ...

  9. (转)函数后面加const--C++ const成员函数

    类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变. 在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于 ...

随机推荐

  1. e3mall商城总结11之sso系统的分析、应用以及解决ajax跨域问题

    说在前面的话 一.sso系统分析 什么是sso系统 SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次 ...

  2. h5整体页面布局

    只要在每个页面加入这段js他会把每个页面平均分成横向25rem,纵向47rem//页面布局 <script> (function(doc, win) { var docEl = doc.d ...

  3. Collection/Map关系图

  4. 从架构到部署,全面了解K3s

    Kubernetes无处不在--开发者的笔记本.树莓派.云.数据中心.混合云甚至多云上都有Kubernetes.它已然成为现代基础设施的基础,抽象了底层的计算.存储和网络服务.Kubernetes隐藏 ...

  5. Python基础 读取二进制文件

    问题 有二进制文件中保存了 20 亿个 2 Bytes 的数,需将其读出,每 20000 个数作图,拟合后输出结果. 解决 # -*- coding: utf-8 -*- ""&q ...

  6. python根据密钥得到谷歌两步验证动态验证码

    # coding=utf-8 import time import base64 import sys import hashlib import hmac import struct def goo ...

  7. python基础三(集合、文件)

    1.集合定义 集合天生能去重,且与字典一样,无序.集合用大括号括起来,里面的元素之间用逗号分隔,要跟字典区分开. 集合定义方法:s=set() #定义一个空集合 s={'1','a','b','c', ...

  8. 用c语言处理文件

    用c语言处理文件只需要用到几个简单的函数: 1.文件的打开和关闭 fopen()函数用来打开一个文件,该函数原型在头文件stdio.h中,调用的一般形式为 /* FILE 是c语言内置的一个结构体类型 ...

  9. 如何用canvas拍出 jDer's工作照

    背景 在京东,就职满五年的老员工被称作"大佬",如果满了十年,那就要被称之为"超级大佬"了. 从 2016 年 5 月 19 日开始,每一年的这一天都被定为京东 ...

  10. 吴恩达《深度学习》-第五门课 序列模型(Sequence Models)-第一周 循环序列模型(Recurrent Neural Networks) -课程笔记

    第一周 循环序列模型(Recurrent Neural Networks) 1.1 为什么选择序列模型?(Why Sequence Models?) 1.2 数学符号(Notation) 这个输入数据 ...