在大本营看到很多朋友都在自己的日志中记录了const的一些作用,但观所有记录日志,大多数都是言const做为指针修饰符的作用,要不然就是在于函数传参及返回值的修饰作用。可能大家还忽视了一点,const还有限制成员函数修改成员变量的作用,参见下列示例
- class Test
- {
- public:
- Test(int a = 0)
- : m_a(a)
- {}
- void add(int& a) const
- {
- m_a++;
- a++;
- }
- private:
- int m_a;
- };
你会发现,实际上上面的代码是编译不过的,因为add尝试去修改内部成员变量。这个对于函数传参,却没有任何影响。我在GCC4.4编译环境下,获得了下列编译错误:
error: increment of data-member 'Test::m_a' in read-only structure
可能有些朋友要问了,如果我只想用这种方法限制某一些成员变量不被修改,但有一些又需要修改怎么办呢?这时候你可以使用mutable关键字了,它解决了这个难题。
- class Test
- {
- public:
- Test(int a = 0)
- : m_a(a)
- {}
- void add(int& a) const
- {
- m_a++;
- a++;
- }
- private:
- mutable int m_a;
- };
你再尝试编译上面程序,它将能正常编译
本文探讨了C++中const关键字如何防止成员函数修改成员变量,并介绍了mutable关键字如何解决这一限制,允许在常量成员函数中修改特定变量。
8718

被折叠的 条评论
为什么被折叠?



