3 回答
TA贡献1906条经验 获得超10个赞
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)
。现在,在end(int Foo::Bar(int random_arg) const
)处添加const 可以理解为带有const this指针的声明:int Foo_Bar(const Foo* this, int random_arg)
。由于this
在这种情况下的类型是const,因此不可能修改成员变量。
可以放宽不允许函数写入类的任何变量的“const函数”限制。为了允许某些变量可写,即使函数被标记为“const函数”,这些类变量也会用关键字标记mutable
。因此,如果一个类变量被标记为可变,并且“const函数”写入该变量,那么代码将干净地编译并且变量可以更改。(C ++ 11)
像往常一样,在处理const
关键字时,在C ++语句中更改const关键字的位置具有完全不同的含义。上述用法const
仅适用于在const
括号后添加到函数声明的末尾时。
const
在C ++中是一个高度过度使用的限定符:语法和顺序通常与指针结合使用并不简单。一些关于const
正确性和const
关键字的读数:
TA贡献1863条经验 获得超2个赞
考虑两个类类型变量:
class Boo { ... };
Boo b0; // mutable object
const Boo b1; // non-mutable object
现在,您可以调用on的任何成员函数,但只能调用成员函数。Boob0constb1
- 3 回答
- 0 关注
- 805 浏览
添加回答
举报