[C++] 五 const关键字

const关键字

什么是const?
常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。
cons主要的作用?
可以定义const常量,具有不可变性。
便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患
可以保护被修饰的东西,防止意外的修改,增强程序的健壮性(如果被修改了编译器就会出现报错)

常成员函数

使用const修饰成员,就是常成员函数
常成员函数有以下特点:
可以调用非const成员变量,但是不能修改其数值
不能调用非const的成员函数

class Test
{
public:
    string s1 = "非const的成员变量";

    void func1()
    {
        cout << "非const的成员函数";
    }

    void func2() const // 常成员函数
    {
        cout << s1 << endl;
//        s1 = "更改"; 错误
//        func1(); 错误
    }

    // 常成员函数调用常成员都可以
    void func3() const
    {
        func2();
    }
};
//如果这个成员函数可以被const修饰,尽量使用const进行修饰

常指针

const int *A; //const修饰指向的对象,A可变,A指向的对象不可变
int const *A; //const修饰指向的对象,A可变,A指向的对象不可变
int *const A; //const修饰指针A, A不可变,A指向的对象可变
const int *const A;//指针A和A指向的对象都不可变

修饰常引用 使用const修饰符也可以说明引用,被说明的引用为常引用,该引用所引用的对象不能被更新。其定义格式如下:
const double & v;

const double & v;

修饰函数的常参数 const修饰符也可以修饰函数的传递参数,格式如下:

void Fun(const int Var);

常量对象

const修饰的对象就是常量对象
常量对象有以下特点:
常量对象中任何属性都不能被修改
常量对象不能调用非const的成员函数

class Test
{
public:
    string s1 = "你好";

    void func1()
    {
        cout << "非const的成员函数" << endl;
    }

    void func2() const;
};

void Test::func2() const
{
    cout << "const的成员函数" << endl;
}

int main()
{
    // 常量对象
    Test const t1;
    const Test t2;
    cout << t1.s1 << endl;
//    t1.s1 = "更改"; 错误
//    t1.func1(); 错误
    t1.func2();

    return 0;
}

常成员变量

使用const修饰的成员变量,就是常成员变量
常成员变量的数值在程序运行期间不可变
常成员变量的赋值操作可以直接在声明后赋值,也可以通过构造出始化列表赋值,其他方式无法赋值

class Test
{
public:
    const int a = 1;

    Test():a(2){} // 构造初始化列表在编译期间决定了a从1到2

    Test(int a):a(a){}
};

int main()
{
    Test t;
    cout << t.a << endl; // 2
//    t.a++; 错误

    Test t2(3);
    cout << t2.a << endl; // 3

    return 0;
}

const修饰局部变量

与const修饰引用参数类似,表示局部变量的值不可变

class Test
{
public:
    void func(const int a)
    {
        const int b = a+1;
//        a++; 错误
//        b++; 错误
        cout << a << endl;
        cout << b << endl;
    }
};

int main()
{
    Test t;
    t.func(45);

    return 0;
}

const修饰静态成员变量

const修饰静态成员与非静态成员的用法基本一致,比较特殊的在于静态成员变量被const修饰后,可以直接在类内赋值初始化

class Test
{
public:
    const static int a = 1;
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值