我有一本书,里面写着这样的话:
class Foo
{
public:
int Bar(int random_arg) const
{
// code
}
};
这是什么意思?
一个“const 函数”,用关键字表示const
在函数声明之后,如果该类函数更改该类的数据成员,则会出现编译器错误。但是,在函数内部读取类变量是可以的,但在该函数内部写入会产生编译器错误。
思考这种“const 函数”的另一种方式是将类函数视为采用隐式函数的普通函数。this
指针。那么一个方法int Foo::Bar(int random_arg)
(末尾没有 const )会产生类似的函数int Foo_Bar(Foo* this, int random_arg)
,以及诸如Foo f; f.Bar(4)
将在内部对应于类似的东西Foo f; Foo_Bar(&f, 4)
。现在在末尾添加 const (int Foo::Bar(int random_arg) const
) 则可以理解为带有 const this 指针的声明:int Foo_Bar(const Foo* this, int random_arg)
。由于类型为this
在这种情况下是 const,无法修改数据成员。
可以放宽不允许函数写入类的任何变量的“const 函数”限制。为了允许某些变量即使在函数被标记为“const function”时也可写,这些类变量用关键字标记mutable
。因此,如果一个类变量被标记为可变的,并且“const 函数”写入该变量,那么代码将干净地编译并且该变量可以更改。 (C++11)
和往常一样,处理问题时const
关键字,更改 C++ 语句中 const 关键字的位置具有完全不同的含义。上面的用法是const
仅在添加时适用const
到括号后的函数声明末尾。
const
是 C++ 中过度使用的限定符:与指针结合使用时,语法和排序通常并不简单。一些有关的读物const
正确性和const
关键词:
常量正确性 http://en.wikipedia.org/wiki/Const-correctness
C++“const”声明:为什么以及如何 http://duramecho.com/ComputerInformation/WhyHowCppConst.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)