const放在函数前后的区别
转载: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放在函数前后的区别的更多相关文章
- const 放在函数后
const 放在函数后表示这个函数是常成员函数, 常成员函数是不能改变成员变量值的函数.const 限定符,它把一个对象转换成一个常量.举例:为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数 ...
- const放在函数前和函数后
class c { public: returnType functionName (parameter list) const; //这个函数不会修改类成员 const returnType fun ...
- const放在函数前和放在函数后
template < class T, class container = vector<T> > class MyClass{ private: T value; publi ...
- C++ 基础 const放在函数末尾的意思
- const 修饰函数
At the very first ,I got a problem . Vector Vector::operator+(const Vector &v)const{ return Vect ...
- c++ 学习之const专题之const成员函数
一些成员函数改变对象,一些成员函数不改变对象. 例如: int Point::GetY() { return yVal; } 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象: ...
- C++ Const成员函数
一些成员函数改变对象,一些成员函数不改变对象. 例如: int Point::GetY() { return yVal; } 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象 ...
- C++中const在函数中的用法
1.const放在函数前面 如果我们的函数的返回值是以 指针形式 返回的,如果在函数前面加上const修饰,则表示指针指向的内容是不能被改变的,并且接收返回值的 指针变量必须是const修饰的,例如: ...
- (转)函数后面加const--C++ const成员函数
类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变. 在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于 ...
随机推荐
- 【MarkDown】github readme添加图片 Markdown语法添加图片,适用各种markdown语法
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, QQ986945193 微博:http://weibo.com/mcxiaobing 首先给大家看一 ...
- C# .NET容器的源码
这里有List<T>的源码http://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs
- 读Twinsen的深入探索透视投影变换
2017.10.16更新,分割线下面是以前的文字,有表达的意思,却言不达意,实属羞耻,看官只需看前面文字即可. Twinsen大神的<深入探索透视投影变换>有几个点说得不够清晰,我这里提一 ...
- 如何配置node环境变量
1,安装node.js 最后安装的目录在 检测node安装成功 node -v 如果报错 没有默认装在c盘 pro 需要配置环境变量 Npm node package manag ...
- 学会BeanShell,才敢说自己懂Jmeter
jmeter的BeanShell Sampler,可以直接引用java代码,有下面3种方式: 1.直接输入java代码 2.导入java文件 3.导入class文件 BeanShell脚本访问变量主要 ...
- 04_Python中的35个关键字
查看Python中的关键字 import keyword print(keyword.kwlist) # 返回一个包含Python关键字的列表 """执行结果 ...
- 设置logback的log文件地址为程序运行的当前目录
这个需求虽然怪异,却也不是无事生非,在以jar包为执行主体的程序中就会遇到. 设置方法就是指定Log_HOME为./,其在如下配置文件的第四行: <?xml version="1.0& ...
- 配置Cassandra开机启动(CentOS 7)
配置环境:centOS 7 1. 编写开机启动脚本[root@cassandra-01 ~]# cd /etc/rc.d/init.d/[root@cassandra-01 init.d]# vi c ...
- pwnable.kr之bof
打开题目: 先下载题目给我们的两个文件,查看文件信息: 发现没有执行的权限,所以先增加文件bof的执行权限,执行: 没发现啥,然后查看代码, #include <stdio.h> #inc ...
- python基础 格式化输出
格式化输出 '%s %d %.2f' % ('Novak', 33, 1.88) 需要逗号