• C++学习笔记-const和static


    const

    1、使用const来定义常量

    const int num = 10; //应该在声明时进行初始化,否则该常量的值是不确定的,而且无法修改

    2、const与指针

    指向常量的指针(const修饰的是指针指向的内容)

    //指向常量的指针
    double rates[5] = {88.9, 100.12, 59.2, 111.1, 23.2};
    const double *pd = rates;
    cout << pd[2] << "
    ";
    pd[2] = 67.99;	//error
    cout << pd[2];
    

    pd为指向常量的指针,

     不能使用pd来修改它指向的数值,但可以让pd指向其他的地址。通常把指向常量的指针用作函数参量。

    指针常量(const 修饰指针)

    //指针常量
    double rates[5] = {88.9, 100.12, 59.2, 111.1, 23.2};
    cout << pd[2] << "
    ";
    double * const pd2 = rates;
    pd2[2] = 67.99;	//ok
    cout << pd[2];
    

     pd2的值不可改变,只能指向最初赋给它的地址,但pd2可以用来改变它所指向的数据值。

    <<effective C++>>上有个好记的方法:const在*号左边修饰的是指针所指的内容;const在*号右边修饰的是指针。
    简单记就是:左内容,右指针。
    也可以这样理解:先忽略类型名,然后看const离哪个近,就修饰谁。
    如:const [int] *p; //先去掉int,这时const 修饰*p, p是指针,*p是指针指向的对象,不可变。

    3、const与引用

    double value = 100;

    const double & v = value;

    不能修改const引用所指向的内容

    4、const与类成员

    class StaticAndConstTest
    {
    public:
    	StaticAndConstTest(int _num = 100);
    	~StaticAndConstTest(void);
    	//类的const 成员常量 必须在构造方法中使用初始化列表来初始化
    	const int num;
    };
    
    StaticAndConstTest::StaticAndConstTest(int _num)
    	: num(_num)
    {
    }
    

     const成员函数

    class StaticAndConstTest
    {
    public:
    	StaticAndConstTest(int _num = 100);
    	~StaticAndConstTest(void);
    	//const成员函数
    	void show() const;
    	//类的const 成员 必须在构造方法中使用初始化列表来初始化
    	const int num;
    };
    
    void StaticAndConstTest::show() const
    {
    	std::cout << num;
    }
    

     const成员函数不能修改调用对象,只要类方法不修改调用对象,就应将其声明为const。

    static

    1、static局部变量

    void test()
    {
    	//static 局部变量 在程序的整个生命周期存在,只有一份,作用域为函数局部
    	static int num = 1000;
    	num++;
    	cout << "num=" << num << "
    ";
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    	for (int i = 0; i < 3; i++)
    	{
    		test();
    	}
    
    	return 0;
    }
    

     输出结果:

    静态局部变量属于静态存储方式,在函数内定义它的生存期为整个程序生命周期,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。
    若在声明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。

    2、static全局变量

    //静态全局变量 只能在定义它的文件中使用,外部无法访问
    static int g_NUM = 100;
    非静态全局变量的作用域是整个源程序,也即在各个源文件中都是有效的。

    3、static与类

    static数据成员与static成员函数函数

    class StaticAndConstTest
    {
    public:
    	StaticAndConstTest(int _num = 100);
    	~StaticAndConstTest(void);
    	//const成员函数
    	void show() const;
    	//静态成员函数 属于类,
    	//无法访问属于类对象的no-static数据成员,也无法访问no-static成员函数,它只能调用其余的静态成员函数。
    	static double GetNum();
    	//类的const 成员 必须在构造方法中使用初始化列表来初始化
    	const int num;
    	//类的静态成员变量,属于类,所有类对象共享
    	static double NUM_2;
    	//静态成员常量
    	static const double NUM_3;
    	//静态成员是整型const可以在类声明中初始化,其他类型不可以
    	static const int NUM_4 = 4;
    	
    };
    
    //静态全局变量 只能在定义它的文件中使用,外部无法访问
    static int g_NUM = 100;
    //静态成员变量在类声明中声明,只能在类定义方法的文件中初始化
    double StaticAndConstTest::NUM_2 = 100.1;
    //静态成员常量 
    const double StaticAndConstTest::NUM_3 = 200.1;
    
  • 相关阅读:
    JWT安装配置
    封装axios请求&添加拦截器
    RESTful风格
    APIView使用增删改查user
    虚拟环境
    VUE异步检查用户名和手机号(6)
    Django-celery验证用户名和手机号(5)
    vue异步发送短息短信(4)
    Django-celery异步发送信息(3)
    Django-celery异步基本配置与使用(2)
  • 原文地址:https://www.cnblogs.com/cmranger/p/4090796.html
Copyright © 2020-2023  润新知