小编典典

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

all

我有一本书,上面写着:

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

这是什么意思?


阅读 136

收藏
2022-03-03

共1个答案

小编典典

在函数声明后用关键字表示的“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
函数”时也是可写的,这些类变量用关键字标记mutable。因此,如果一个类变量被标记为可变,并且一个“const
函数”写入这个变量,那么代码将编译干净并且变量可以改变。(C++11)

像往常一样处理const关键字时,在 C++ 语句中更改 const
关键字的位置具有完全不同的含义。上述用法const仅适用于const在括号后添加到函数声明的末尾时。

const是 C++ 中一个过度使用的限定符:语法和排序通常与指针结合起来并不简单。const关于正确性和const关键字的一些读数:

常量正确性

C++ ‘const’
声明:为什么和如何

2022-03-03