const在函数前后的意义
【摘要】 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)