C++ const常函数和const指针的用法

本文深入解析C++中的const修饰符,包括其在常函数、常对象、const指针中的应用,以及如何利用const指针保护数据不被修改,适用于C++初学者和进阶者。

const常函数

对于类中的函数,若是定义了const,就成为了常函数;
const修饰函数承诺在本函数内部不会修改类内的数据成员,不会调用其它非 const 成员函数。
常函数可以使用数据成员,但是不能修改数据成员,对函数的功能有更明确的限定;
如:

class A{
private:
    int a = 0;
public:
    int change() const
    //change()就成为了常函数
    {
        this->a = 1;
        //常函数不能修改类中的数据成员,error
        return a;
    }

};

同时加了const定义的对象成为常对象,常对象只能调用常函数,如:

A const a;

a成为常对象,只能调用常函数

const指针

如下参考自《C++ primer plus》
const指针有两种不同的定义方法:

  1. 指向const常量对象的指针,防止使用该指针来修改所指向的值,如:
const float g_earth = 9.80
const float *pe = &g_earth

这种定义方法无法通过常量指针来修改所指向地址的内容,但是可以通过变量自身来修改(若是非const常量);
在C++中规定,禁止将const常量的地址赋予非const常量指针,也就是const常量的地址必须赋予常量指针; 非const常量的地址可以赋予给const常量指针; 这样因为若为一个非const常量指针赋予了const常量的地址,那么允许通过非const常量指针来修改const常量的内容,和const的定义相悖了;

  1. 将指针本身声明为常量,可以防止改变指针指向的位置,如:
int sloth = 3
int * const finger = &sloth

这样指针finger只能指向sloth,但是不影响使用finger来修改sloth的值(当然sloth需要是非const变量)

这里在补充一种方式:

double trouble = 2.0E30
const double * const stick = &trouble

这样stick只能指向trouble,并且也不能通过stick来修改trouble的值;

const指针的使用场景

我们在将指针变量作为参数来传递的时候,可以使用指向const的指针来保护传入的数据,这样在函数中是没有办法通过指针来修改传入的数据;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值