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 对象只能访问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;
}
————————————————
版权声明:本文为CSDN博主「越甲八千」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/doubleintfloat/article/details/109320008