1.const修饰指针
const int k = 5; //没啥好说的a是一个常量,不能被修改值
const int *a = &k;
int const *a = &k; //两种情况一样,const在 *前面代表,const修饰的是 *a,是这个地址的内容,所以 *a不可以被改变,但是 a可以改变指向
int *const a = &k; //const在 *后面代表,const修饰的是a指向的这个地址,这个指向的地址不可变,但是 *a,这个地址的值可以改变
const int* const a; //a的指向固定,*a也固定
2.const修饰函数
const放在开头
#include<iostream>
using namespace std;
const char* test(char * ans) //const 后面必须和*搭配才有意义
{
return ans;
}
const int lala(int a)
{
return a;
}
int main()
{
char* temp = test("abc"); //会报错 const char* test(char * ans) 函数返回的是一个const char*类型值,不能修改返回值
const char* temp = test("abc"); //这样就不会错了
cout << temp;
int b = lala(1); //毫无影响
return 0;
}
const放在函数末尾,这种情况只能在类成员函数里使用
class test
{
private:
int a;
public:
test() :a(1){}
int fun()const{ a++; return a; } //这种情况错误,const放在成员函数名后面当作限定符,此函数不可更改类的属性,一般用于返回属性值
int fun2()const{ return a; }
};
如果一定要在const成员函数中改变属性可以这样
class test
{
private:
mutable int a; //对属性加个mutable修饰符,就可以在const成员函数中修改属性了
public:
test() :a(1){}
int fun()const{ a++; return a; } //这种情况错误,const放在成员函数名后面当作限定符,此函数不可更改类的属性,一般用于返回属性值
int fun2()const{ return a; }
};