我买了一本书,上面写着这样的内容:
这是什么意思?
class Foo
{
public:
int Bar(int random_arg) const
{
// code
}
};
这是什么意思?
class Foo
{
public:
int Bar(int random_arg) const
{
// code
}
};
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,所以不能修改数据成员。考虑两个类类型的变量:
class Boo { ... };
Boo b0; // mutable object
const Boo b1; // non-mutable object
现在您可以在b0
上调用任何Boo
成员函数,但只能在b1
上调用const
限定的成员函数。
Bar
保证不会改变其被调用的对象。例如,有关const正确性的部分,请参见C++ FAQ中的相关章节。
mutable
关键字。 - Nikolai Fetissov我总是觉得,从概念上来看,把“this”指针设置为const更容易理解(这基本上就是它的作用)。
this
指针本身是const
,而是它所指向的内容,即*this
;) - fredoverflow函数不能通过你给它的指针/引用更改其参数。
每次需要思考时,我都会访问此页面:
http://www.parashift.com/c++-faq-lite/const-correctness.html
我相信在 Meyers 的 "More Effective C++" 中也有一章很好的内容。
this
的类型从Foo* const
更改为const Foo* const
,这会产生后果。 - sbistatic
还是非static
)。它们会传递一个隐藏的参数this
,该参数是指向调用实例的指针。 - ereOnFoo*
转换为const Foo*
”。this
不是一个常量指针。过去,一些实现使用常量指针作为技巧来表示this
,但我认为这个答案解释得很好。 - starrietthis
** 是一个右值,但不是 **const
**,对吧?所以我的评论在技术上是错误的,但可悲的是,我不能再修正它了。 - sbi