C++(17)--详解const

详解const


《老九学堂C++课程》《C++ primer》学习笔记。《老九学堂C++课程》详情请到B站搜索《老九零基础学编程C++入门》
-------------简单的事情重复做,重复的事情用心做,用心的事情坚持做(老九君)---------------

1.const修饰成员变量
2.const修饰函数参数
3.const修饰返回值
4.const 修饰函数

//
// Created by 陈莹莹 on 2021/2/25.
//

#ifndef CHAPTER12_CONSTDEMO_H
#define CHAPTER12_CONSTDEMO_H
#include <iostream>
using namespace std;
//1.const修饰成员变量
void ConstDemo1(){
    int num1 = 1024;
    const int num2 = num1; //常量第一次赋值的时候没有错
    // num2 = 2048;        //第二次赋值的时候就报错了
    const int *ptr1_num1 = &num1;  // (与下面这一行等价吧)编译能够过, 不能通过指针去改num1,指针本身可以改指
    int const *ptr2_num1 = &num1;  // 合法
    ptr1_num1 = &num2;             // 合法:内容const指针再指向,没问题
    //*ptr1_num1 = 1024;           // 不合法:内容const指针指向的内容无法修改
    // const修饰指针变量时:
    // 1.只有一个const时,如果const 位于*的左侧,表示指针所指的数据时常量,不能通过改指针去自改实际数据,指针可以改指
    // 2.只有一个const时,如果const 位于*的右侧,表示指针身上时常量,不能指向其他内存单元,指针所是指向的数据可以修改
    // 3.两个const位于*的左右两侧,表示指针和指针所指向的数据都不能修改
    int * const ptr3_num1 = &num1;
    // ptr3_num1 = ptr2_num1;     // 不合法
}
// 2.const修饰函数参数
void ConstTest2(const int num){
    // num = 123; // 不合法,传递来的参数num在函数体内部不可改变,与修饰变量的性质一致
}
class Computer{
public:
    Computer(int core){this->m_core = core;}
    void buy(int core){
    }
    /** 修改电脑的核心频率 */
    void SetCore(int core){this->m_core = core;}
    int GetCore() const {return m_core;}

private:
    int m_core; // cpu的主频
};
void ConstTest3(const Computer & computer){
    // const 修饰引用时,不能修改引用变量的成员-
    // 好处:可以保护传递的参数,不需要一个新的参数副本
    // computer.buy(123);         // 不合法,
    // 使用cosnt传递对象的引用时,可以起到不copy对象的目的(节省效率)
    // 需要在成员函数的圆括号后加一个const 修饰void buy(int core) const{}
}
//3.const修饰返回值。返回引用加const 效率更高
//强调:使用const 修饰引用类型的一个常见原因是:提高效率
const Computer & GetMax(const Computer & com1, const Computer & com2){
    if(com1.GetCore() > com2.GetCore()){
        return com1;
    }
    return com2;
}
//如果函数要返回局部对象,就应该直接返回这个对象,而不是返回对象的引用
const Computer GetMax1(const Computer & com1, const Computer & com2){
    Computer com3(2);  // 不返回引用是一副本的形式生成
    if(com1.GetCore() > com2.GetCore()){
        return com1;
    }
    else{
        com3 = com2;
    }
    return com3;
}
// 在可以返回对象,也可以返回引用时,首选返回引用高,因为效率高

//4.const 修饰函数-- 说明函数不会修改成员变量的值
class TestClass{
public:
    int value;
    void ModifyValue(){
        value = 1111;
    }
};
//为了在重载运算符时更有效
#endif //CHAPTER12_CONSTDEMO_H
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值