能有人告诉mutable
关键字的使用,一个活生生的例子一些活生生的实例,当它在一个const
函数用于解释在一个活生生的例子对mutable
和const
功能也差为volatile
成员和功能。C++语言可变
C++语言可变
回答
对于const对象实例中允许修改的变量,您可以使用mutable。这被称为逻辑常量(与逐位常数相反),因为从用户的角度来看对象没有改变。
例如,您可以缓存字符串的长度以提高性能。
class MyString
{
public:
...
const size_t getLength() const
{
if(!m_isLenghtCached)
{
m_length = doGetLength();
m_isLengthCached = true;
}
return m_length;
}
private:
sizet_t doGetLength() const { /*...*/ }
mutable size_t m_length;
mutable bool m_isLengthCached;
};
我使用它们的其他地方是在迭代器中,其中const指的是迭代器值,而不是迭代器索引(它必须是可变的) – Anycorn 2010-03-13 16:57:12
所以你定义常量迭代器是const_iterators ......我从来没有理解为什么有两种不同的类型。 – 2010-06-30 12:13:25
@Alexandre:因为迭代器的常量和它引用的值的常量是两个完全不同的东西。 – 2010-06-30 12:34:02
您可以在计数器上使用mutable来跟踪通过const访问器访问类成员的次数。
我用它一次来实现memoization。
- 1. 变化在scanf C语言
- 2. STM32上C语言的全局变量
- 3. 结构值不能改变(C语言)
- 4. C语言中char变量的值
- 5. 用c语言
- 6. C语言
- 7. 交换两个可变由Scala语言
- 8. 有什么方法可以用C语言改变目录吗?
- 9. C语言的Java建模语言?
- 10. C语言数据结构可视化
- 11. C#中的语言可选返回值
- 12. 哪些类型在Google Go语言中可变且不可变?
- 13. C语言语义规范
- 14. 语法与C语言
- 15. 学习C++语言
- 16. c语言问题
- 17. 计算C语言
- 18. 在Objective - C语言
- 19. C#SAPI 5.4语言?
- 20. 扩展C#语言?
- 21. C++语言扩展
- 22. C#语言更新
- 23. C#解释语言
- 24. C语言错误
- 25. C#脚本语言
- 26. C语言识别#
- 27. 备案C语言
- 28. Pascal和C语言
- 29. C语言指针
- 30. C语言创建
可能的重复:http://stackoverflow.com/questions/105014/c-mutable-keyword – dirkgently 2010-03-13 11:57:15