为了账号安全,请及时绑定邮箱和手机立即绑定

函数声明结尾的“const”是什么意思?

函数声明结尾的“const”是什么意思?

C++
繁华开满天机 2019-08-23 10:56:35
函数声明结尾的“const”是什么意思?我有一本书,里面写着:class Foo {public:     int Bar(int random_arg) const     {         // code     }};这是什么意思?
查看完整描述

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关键字的读数:

Const正确性

C ++'const'宣言:为什么和如何


查看完整回答
反对 回复 2019-08-23
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

考虑两个类类型变量:


class Boo { ... };


Boo b0;       // mutable object

const Boo b1; // non-mutable object

现在,您可以调用on的任何成员函数,但只能调用成员函数。Boob0constb1


查看完整回答
反对 回复 2019-08-23
  • 3 回答
  • 0 关注
  • 769 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信