zoukankan      html  css  js  c++  java
  • const的使用

    const修饰指针

    const修饰指针有三种情况

    1. const修饰指针 --- 常量指针
    2. const修饰常量 --- 指针常量
    3. const即修饰指针,又修饰常量

    示例:

    int main() {
    
    	int a = 10;
    	int b = 10;
    
    	//const修饰的是指针,指针指向可以改,指针指向的值不可以更改
    	const int * p1 = &a; 
    	p1 = &b; //正确
    	//*p1 = 100;  报错
    	
    
    	//const修饰的是常量,指针指向不可以改,指针指向的值可以更改
    	int * const p2 = &a;
    	//p2 = &b; //错误
    	*p2 = 100; //正确
    
        //const既修饰指针又修饰常量
    	const int * const p3 = &a;
    	//p3 = &b; //错误
    	//*p3 = 100; //错误
    
    	system("pause");
    
    	return 0;
    }
    

    技巧:看const右侧紧跟着的是指针还是常量, 是指针就是常量指针,是常量就是指针常量

    结构体中 const使用场景

    作用:用const来防止误操作

    示例:

    //学生结构体定义
    struct student
    {
    	//成员列表
    	string name;  //姓名
    	int age;      //年龄
    	int score;    //分数
    };
    
    //const使用场景,将函数形参改为指针,可以减少内存空间,不会复制新的副本出来
    void printStudent(const student *stu) //加const防止函数体中的误操作
    {
    	//stu->age = 100; //操作失败,因为加了const修饰,指针指向可以改,指针指向的值不可以更改
    	cout << "姓名:" << stu->name << " 年龄:" << stu->age << " 分数:" << stu->score << endl;
    
    }
    
    int main() {
    
    	student stu = { "张三",18,100 };
    
    	printStudent(&stu);
    
    	system("pause");
    
    	return 0;
    }
    

    const修饰成员函数

    常函数:

    • 成员函数后加const后我们称为这个函数为常函数
    • 常函数内不可以修改成员属性
    • 成员属性声明时加关键字mutable后,在常函数中依然可以修改

    常对象:

    • 声明对象前加const称该对象为常对象
    • 常对象只能调用常函数

    示例:

    class Person {
    public:
    	Person() {
    		m_A = 0;
    		m_B = 0;
    	}
    
    	//this指针的本质是一个指针常量,指针的指向不可修改
    	//如果想让指针指向的值也不可以修改,需要声明常函数
    	void ShowPerson() const {
    		//const Type* const pointer;
    		//this = NULL; //不能修改指针的指向 Person* const this;
    		//this->mA = 100; //但是this指针指向的对象的数据是可以修改的
    
    		//const修饰成员函数,表示指针指向的内存空间的数据不能修改,除了mutable修饰的变量
    		this->m_B = 100;
    	}
    
    	void MyFunc() const {
    		//mA = 10000;
    	}
    
    public:
    	int m_A;
    	mutable int m_B; //可修改 可变的
    };
    
    
    //const修饰对象  常对象
    void test01() {
    
    	const Person p; //常量对象  
    	cout << p.m_A << endl;
    	//p.mA = 100; //常对象不能修改成员变量的值,但是可以访问
    	p.m_B = 100; //但是常对象可以修改mutable修饰成员变量
    
    	//常对象访问成员函数
    	p.MyFunc(); //常对象不能调用const的函数
    
    }
    
    int main() {
    
    	test01();
    
    	system("pause");
    
    	return 0;
    }
    

    总结:
    成员函数后加const,修饰的是this指针的指向,让指针指向的值也不能修改。

  • 相关阅读:
    CSS练习
    大作业“抽屉页面”html+css
    html练习代码
    协程-基于TCP的高并发通信
    协程-爬虫示例
    互斥锁,递归锁,信号量
    三层架构(我的理解及详细分析)
    递归算法经典实例小结(C#实现)
    使用XmlWriter写Xml
    使用XmlReader读Xml
  • 原文地址:https://www.cnblogs.com/fynnn/p/14467034.html
Copyright © 2011-2022 走看看