const在函数前后的意义

举报
IM_STONE 发表于 2020/12/29 01:06:38 2020/12/29
【摘要】 const在函数前后的意义(有点晦涩,但是请一定看完) 一、const在函数后面 1、只允许在类的非静态成员函数后面加const;(加到非成员函数 或 静态成员后面会产生编译错); 2、后面加的const其实是对隐含传入参数this指向类对象的修饰,即 *this 是被const修饰,那this所指向的类对象的成员都是不允许被修改的; (备注:有人认为const修...

const在函数前后的意义(有点晦涩,但是请一定看完)

一、const在函数后面

1、只允许在类的非静态成员函数后面加const;(加到非成员函数 或 静态成员后面会产生编译错);
2、后面加的const其实是对隐含传入参数this指向类对象的修饰,即 *this 是被const修饰,那this所指向的类对象的成员都是不允许被修改的;

(备注:有人认为const修饰的是this指针,那么不能改变的就是this指针本身,而不是this指针指向的成员,其实这个const修饰的是this和(*this),下面代码有详细解释,this指针的实际参数是:const A * const this格式的)

3、唯一的例外是对于mutable修饰的成员。
4、加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调用

二、const在函数前面

1 、返回值为const;

上代码:

#include <iostream>
#include<memory>
#include<string>
#include<vector>
#include<list>
#include<typeinfo>
using namespace std;
//const和函数结合
//一、const在函数后面
//1、只允许在类的非静态成员函数后面加const;(加到非成员函数 或 静态成员后面会产生编译错);
//2、后面加的const其实是对隐含传入参数this指向类对象的修饰,即 *this  是被const修饰,
//那this所指向的类对象的成员都是不允许被修改的;
//(备注:有何友人认为const修饰的是this指针,那么不能改变的就是this指针本身,
//而不是this指针指向的成员,其实这个const修饰的是this和(*this),下面代码有详细解释)
//3、唯一的例外是对于mutable修饰的成员。
//4、加了const的成员函数可以被非const对象和const对象调用,
//但不加const的成员函数只能被非const对象调用
//二、const在函数前面
// 1 、返回值为const;
void func1(int a, int b)const//error  参考规则1  只允许在类的非静态成员函数后面加const;
//(加到非成员函数 或 静态成员后面会产生编译错);
{

}

static int func2()const//error参考规则1  只允许在类的非静态成员函数后面加const;
//(加到非成员函数 或 静态成员后面会产生编译错);
{

}

class A
{
public:
	void add(int a, int b)const//OK 其实这是传入的this指针应该是这样的形式:
	// const A * const this 所以this  和*this  都不允许改变
	{
		m_c = 100;//ok  
		m_a = 100;//
		this = 0XFFFF0048;//error 
	}

	static void sub(int a, int b)const//error  参考规则1  只允许在类的非静态成员函数后面加const;
	//(加到非成员函数 或 静态成员后面会产生编译错);
	{

	}
private:
	int m_a;
	int m_b;
	mutable int m_c;
};

const char* func3()
{
	char *m = "test";
	return m;
}
int main()
{
	char * p = func3();//error  返回值为const;  char*p 不是 const
	const char * s = func3();//ok
	cout << s << endl;
} 
  
 

文章来源: blog.csdn.net,作者:IM-STONE,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/doubleintfloat/article/details/109320008

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。