gpt4 book ai didi

c++ - this 指针作为指向对象的指针

转载 作者:太空狗 更新时间:2023-10-29 20:17:53 28 4
gpt4 key购买 nike

假设 employee 是一个类....print 是它的非静态成员函数,它打印其私有(private)数据成员 x 的值...现在我读到如果 print 是一个常量函数,则 this 指针传递给它编译器的类型是

const employee* const

如果 print 是非常量函数,则此指针的类型为

employee* const

....现在的问题是我还没有将 employee 类的对象声明为常量,所以如果 print 被声明为常量函数,“this”如何指向一个常量员工对象....

最佳答案

考虑冰淇淋甜筒。假设您去冰淇淋店点了一个“ Vanilla 甜筒”。你会得到一个带有一勺 Vanilla 冰淇淋的蛋筒。然后你可以在上面加一颗樱桃,但它仍然是你点的—— Vanilla 甜筒。

对象有点像冰淇淋甜筒。 const-ness 就像上面的樱桃。您可以在不更改对象本身的情况下将常量添加到对象:

class Foo 
{
public:
void DoIt() {};
} foo;

Foo* regular_foo = &foo; // OK
const Foo* const_foo = &foo; // Also OK

回到冰淇淋店。这次点了一个 Vanilla 糖屑。他们给你一个锥形冰淇淋,上面放着一勺 Vanilla 冰淇淋和一些糖果。现在你不能在不改变你订购的东西的情况下取下糖屑。如果你去掉糖屑,你将不会得到“带糖屑的 Vanilla 蛋筒”,你只会得到一个 Vanilla 蛋筒。

class Foo 
{
public:
void DoIt() {};
};

const Foo foo;
Foo* regular_foo = &foo; // Not OK!
const Foo* const_foo = &foo; // But this is OK

编辑:

为了更严格地处理我上面的类比,您可以阅读@Potatoswatter 引用的 Standard 中的段落:

4.4 限定转换[conv.qual]

1 An rvalue of type “pointer to cv1 T” can be converted to an rvalue of type “pointer to cv2 T” if “cv2 T” is more cv-qualified than “cv1 T.”

关于c++ - this 指针作为指向对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5654345/

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