C++学习笔记(十八):c++ const

  • c++中const关键字强制用该关键字修饰的内容不可被改变,但可以通过某种操作绕过该限制。
  • 在指针和变量中使用const
#include
#include

int main()
{
	//const声明的是一个常量,而不是变量,意味着声明的内容不可以修改,但可通过一些操作修改,如下程序所示
	const int MAX_AGE = 90;
	int* a = new int;  //类型强制转换将const int*转换为int*
	a = (int*)&MAX_AGE; //修改指针,如果不想修改a指针,这需要给a指针田间const关键字

	const int* b = new int;  //表示b指针地址实际内存地址的内容为const,不可以修改
	//int const * b = new int;  //将const置于int前和int后表示的含义一样,均表示指针指向的内容不可被修改
	b = (int*)&MAX_AGE;      //但可以改变指针本身

	int* const c = new int;  //将const关键字添加到此处,意味着该指针本身不可被修改,但可以改变指针指向的内容

	const int* const d = new int;//表示指针指向的内容不能被修改,指针本身同样不能被修改

	std::cin.get();
	return 0;
}
  • 在类中使用const修饰变量
class Entity 
{
private:
	int m_X, m_Y;
public:
	int GetX() const  //将const放置在方法名右面,表示该方法不会修改任何实际的类(只读不写)
	{
		//m_X = 1;   //会报错
		return m_X;
	}
	void SetX(int x)
	{
		m_X = 1;
	}

};
  • 在类中用const修饰指针
class Entity 
{
private:
	int* m_X, *m_Y;
public:
	const int* const GetX() const  //表示函数返回一个不能被修改的指针,指针指向的内容不能被修改,同时该函数不能修改类中指针m_X
	{
		return m_X;
	}
	void SetX(int x)
	{
		*m_X = 1;
	}

};
  • 如果在const修饰的方法中确实想修改某个变量,则可以在该变量前添加mutable关键字
  • #include
    #include
    
    class Entity
    {
    private:
    	int m_X, m_Y;
    	mutable int var;
    public:
    	int GetX() const  //将const放置在方法名右面,表示该方法不会修改任何实际的类(只读不写)
    	{
    		var = 1;   //可正常运行
    		return m_X;
    	}
    	void SetX(int x)
    	{
    		m_X = 1;
    	}
    
    };

你可能感兴趣的:(c++,学习,笔记)