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 & test1Test是类型名,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 协议 ,转载请注明出处!