在大本营看到很多朋友都在自己的日志中记录了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;
- };
你再尝试编译上面程序,它将能正常编译