const成员函数和mutable关键字
2017-01-20 15:42
148 查看
一、const成员函数
class MyClass
{
public:
void fun() const
{
}
private:
int m_nValue;
}
const成员函数内不能修改成员变量的值,也不能调用非const成员函数。const对象只能调用const成员函数。
二、mutable关键字
class MyClass
{
public:
void Show()const;
private:
int m_value;
mutable int m_showCount;
};
MyClass::Show()
{
m_value=1;//错误,不能在const成员函数中修改普通变量
m_showCount++;//正确
};
mutable只能修饰非静态成员变量。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中,甚至结构体变量或者类对象为const,其mutable成员也可以被修改。
三、为什么要使用const和mutable
保护类的成员变量不在成员函数中被修改,是为了保证模型的逻辑正确,通过用const关键字来避免在函数中错误的修改了类对象的状态。并且在所有使用该成员函数的地方都可以更准确的预测到使用该成员函数带来的影响。而mutable则是为了能够突破const的封锁线,让类的一些次要的或者辅助性的成员变量随时可以被更改。没有使用const和mutable关键字当然没有错,const和mutable关键字只是给了建模工具更多的设计约束和设计灵活性,而且程序员也可以把更多的逻辑检查问题交给编译器和建模工具去做,从而减轻程序员的负担。
class MyClass
{
public:
void fun() const
{
}
private:
int m_nValue;
}
const成员函数内不能修改成员变量的值,也不能调用非const成员函数。const对象只能调用const成员函数。
二、mutable关键字
class MyClass
{
public:
void Show()const;
private:
int m_value;
mutable int m_showCount;
};
MyClass::Show()
{
m_value=1;//错误,不能在const成员函数中修改普通变量
m_showCount++;//正确
};
mutable只能修饰非静态成员变量。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中,甚至结构体变量或者类对象为const,其mutable成员也可以被修改。
三、为什么要使用const和mutable
保护类的成员变量不在成员函数中被修改,是为了保证模型的逻辑正确,通过用const关键字来避免在函数中错误的修改了类对象的状态。并且在所有使用该成员函数的地方都可以更准确的预测到使用该成员函数带来的影响。而mutable则是为了能够突破const的封锁线,让类的一些次要的或者辅助性的成员变量随时可以被更改。没有使用const和mutable关键字当然没有错,const和mutable关键字只是给了建模工具更多的设计约束和设计灵活性,而且程序员也可以把更多的逻辑检查问题交给编译器和建模工具去做,从而减轻程序员的负担。
相关文章推荐
- const成员函数和mutable关键字
- C++中的const成员函数和mutable关键字
- const 和 volatile 成员函数、mutable 数据成员
- 含有const关键字成员函数
- C++ 类成员函数后面加 const关键字
- const关键字对C++成员函数的修饰
- const关键字在类的成员函数上的应用(2)
- 十四、对象的使用(二)const成员函数、const对象、mutable
- CPP-基础:非静态成员函数后面加const,以及mutable修饰成员变量
- const关键字在类的成员函数上的应用(1)
- c++ const 成员函数和mutable
- const只读成员函数与mutable
- 一个使用mutable修改const成员函数的栗子
- C++学习之路(20)---C++ 类成员函数后面加 const关键字
- const成员函数和mutable
- 成员函数末尾使用const关键字
- const类型成员函数与mutable
- C++成员函数末尾const关键字的作用
- c++ primer笔记 将关键字 const 加在形参表之后,就可以将成员函数声明为常量:
- C++ 类成员函数后面加 const关键字