gpt4 book ai didi

c++ - 函数声明末尾的 "const"是什么意思?

转载 作者:bug小助手 更新时间:2023-10-28 01:30:40 26 4
gpt4 key购买 nike

我有一本书,上面写着:

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

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

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

Const correctness

The C++ 'const' Declaration: Why & How

关于c++ - 函数声明末尾的 "const"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3141087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com