C++ const
const 修饰指针指向的内容
内容不可以改变。如下。
int main()
{
int a=4;
int b=5;
const int *p=&a;
p=&b;//OK
*p=9;//error
return 0;
}
const 修饰指针
那么指针本身不可以改变。指针指向的值可以改变。
int main()
{
int a=4;
int b=5;
int * const p=&a;
*p=9;//ok
p=&b;//error
return 0;
}
可以同时修饰指针和指针指向的值。
const int * const p = &a;
函数传参的时候,参数如果是const int a
,那么a在函数内不能改变。也可以使用上述3种情况的代码。
对于自定义类型
传参数可以加 const &,比如const Test & test1
,Test
是类型名,test1
是变量名。这样不用拷贝,可以加速参数传递。
修饰函数返回值
一般组合 const int &使用。如果只有&没有const,说明是引用,即别名,是左值可以被赋值,防止修改的话需要加const。
#include<iostream>
using namespace std;
class A
{
private:
int data;
public:
A(int num):data(num){}
~A(){};
const int& get_data()//返回引用
{
return data;
}
};
int main()
{
A a(1);
a.get_data()=3;//加了const 就error
cout<<a.get_data()<<endl;
return 0;
}
如果const单纯修饰int等内置类型,那么修不修饰没区别。
如果函数返回值是个指针,那么也和前面说的前三个一样。但要注意赋值前后值的类型应该一致。如下:
int * const f1(){//这要求指针不能改,但是指针指的值可以改。
int * p;
p = new int;
*p = 1;
return p;
}
int main(){
int * const p1= f1();//通过,但不能是const int * p1,因为这样修饰了p1对应的值,而不是指针本身。
return 0;
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!