从C到C++ 番外const的用法

        const是constant的缩写,意为不变的,恒定的。在C++中存在const保留关键词,它可以声明一个常量,编译器在编译时直接将其锁死,不可对其的值进行修改,只能读取。下面来详细讲解其用法

最简单的用法

        在初始化一个数据,对象时,使用const关键词,将其变为常对象。用const修饰的变量值在程序任意位置不能再被修改,就像一个常数一样使用。不可对其值进行修改,赋值,只能读取

int a = 12;
const int a1 = 114514;
int const a2 = 114514;
a1 = 1919810;//错误,a1已被cosnt修饰,成为常量
a2 = 13;//cosnt在数据类型声明前后均可
a = 11;//普通变量的修饰
const int i;//错误,必须进行初始赋值
string s = "qwqwq";
string const s1 = "qaqaq";
const string s2 = "wqwqwq";
s = "123";//正确
s1 = "qqqqq";//错误
s2 = "swdadw";//错误

const引用        

        const引用,可以对const对象创建cosnt引用,也可以对普通对象创建const引用,无法对const对象创建普通引用。因为const修饰的变量只能读,因此用一个可以读也可以写的普通引用去和const修饰的可读不可写的变量建立关系显然是不可取的;而对普通对象建立的const引用,只能读取,不能修改,这一特性可以保护原对象,在一些函数里常用。

    const int a1 = 114514;
    int const a2 = 114514;
    const int &b1 = a1;
    const int &b = a;
    int &b2 = a2;//非法 

         然后是一些const引用的特性,可以绑定在类型不同但相关(float和int都是数字,但具体什么叫相关正在努力研究中...)的变量上;也可以让const初始化为一个字面值常量。

    float d = 3.14;//const引用可以绑定到类型不同,但类型相关的变量上
    const int &d1 = d;//正确,允许这样绑定
    int &d2 = d;//错误,普通引用无这样的特性
    const float &e = 3.1415;//const引用也可以直接对没有初始化的数据进行绑定
    float &f = 3.14159//错误, 普通引用无这种特性

        引用在内部存放的是一个对象的地址,它是该对象的别名。对于不可寻址的值,如文字常量,以及不同类型的对象,编译器为了实现引用,必须生成一个临时对象,引用实际上指向该对象,但用户无法访问#来源文章#

const成员函数

将关键字const加在形参表之后,可将成员函数声明为常量。

class student
{
    private:
        int num;
        int score;
    public:
        void display() const;
};
void student::display() const
{
    cout<<num<<endl;
}

const成员函数不能改变其所操作的对象的数据成员,只能读,不能修改;

const成员必须同时出现在声明和函数体中,是常成员函数的一部分。

 对于两个成员函数,名字和参数均相同,是否为const会被当做重载

const用于共用数据的保护

常数据成员

class student
{
    private:
        const int degree;
        int num;
        int score;
    public:
        void display() const;
};
void student::display() const
{
    cout<<num<<endl;
}

在数据成员前加上const将其声明称常数据成员,只能读取,不能修改,需要使用参数列表进行初始化。

常对象

class student
{
    private:
        const int degree;
        int num;
        int score;
    public:
        void display() const;
};
void student::display() const
{
    cout<<num<<endl;
}
int main()
{
    const student st1;
    student const st2;//const放在前放在后均可
}

一个对象被声明为常对象后,仅能调用其中的常成员函数,且无法对内部数据进行修改,需在初始化时带上所有参数。

由于有常函数和常对象的存在,保证了const对象内部数据绝对安全。但有些想要修改的数据则可以用指定可变数据成员的方法

mutable int i;

这样之后就可以用const常成员函数修改。

指向对象的常指针、指向常对象的指针

指向对象的常指针

//指向对象的常指针
time t1(19,12,14),t2;
time *const pl = &t1;

指向常对象的指针

const char c[] = "boy";
const chat* p1 = c;

指向对象的常指针(const pointer):指针的值不变,指向不变。

指向常对象的指针:其指向的类对象的值不能通过指针改变,用于函数参数传递,保护对象。

总结

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值