gpt4 book ai didi

c++ - "this"指针总是 const 吗?

转载 作者:行者123 更新时间:2023-11-30 02:55:53 25 4
gpt4 key购买 nike

X 是一个类,其成员函数为f()

thisf() 的隐式参数,类型为X* const

然后,如果 f() const 是一个 const 成员函数,则 this 指针的类型现在是 const X* const

在这两种情况下,this 指针的类型似乎都是const。那么为什么在函数 f() 定义中允许修改类 X 的任何数据成员?我们不应该像在

中那样总是求助于 const_cast吗?
void X::f() {        
const_cast <int&> (member) = 1;
}

如果 f() const 是 const,那么可以这样做:

void X::f() const{        
const_cast <int&> (member) = 1;
}

(或者你也可以让成员可变)

但是为什么会这样呢

void X::f() {  
member = 1;
}

最佳答案

this is implicit argument for f(), it is of type X* const.

不完全是(它实际上是 X* 类型的右值),但对于这个问题来说已经足够接近了。

In both cases, it seems that type for this pointer is const. Why then is it allowed inside the function f() definition to modify any data member of class X ?

因为如果指针const(如X* const),你不能改变指针。您可以更改它指向的任何内容。如果它是指向 const 的指针(如 const X*),则您无法更改它指向的内容。

所以你永远不能修改this本身;你不能写 this = &some_other_object。在 const 成员函数中,如果没有狡猾的 const_cast,您也不能修改 *this 的(非可变)成员。

关于c++ - "this"指针总是 const 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16103427/

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