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

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

我有一本书,里面写着:

class Foo {public:
    int Bar(int random_arg) const
    {
        // code
    }};

这是什么意思?


繁华开满天机
浏览 771回答 3
3回答

隔江千里

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'宣言:为什么和如何

小唯快跑啊

考虑两个类类型变量:class Boo { ... };Boo b0;       // mutable objectconst Boo b1; // non-mutable object现在,您可以调用on的任何成员函数,但只能调用成员函数。Boob0constb1
打开App,查看更多内容
随时随地看视频慕课网APP