加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 此指针作为指向对象的指针

发布时间:2020-12-16 09:34:02 所属栏目:百科 来源:网络整理
导读:假设employee是一个类…. print是它的非静态成员函数,它打印其私有数据成员x的值…现在我读到如果print是一个常量函数,那么编译器传递给它的this指针是这种类型 const employee* const 如果print是非常量函数,则该指针的类型为 employee* const ….现在的问
假设employee是一个类…. print是它的非静态成员函数,它打印其私有数据成员x的值…现在我读到如果print是一个常量函数,那么编译器传递给它的this指针是这种类型

const employee* const

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

employee* const

….现在的问题是,我还没有将类员工的对象声明为常量,那么如果将print声明为常量函数,那么’this’如何指向一个常量的employee对象….

解决方法

考虑冰淇淋甜筒.假设你去冰淇淋店订购“香草锥”.你会得到一个带有一勺香草冰淇淋的圆锥.然后你可以在上面添加一个樱桃,但它仍然是你订购的 – 一个香草锥.

物体有点像冰淇淋蛋筒.常数就像樱桃一样.您可以在不更改对象本身的情况下将constness添加到对象:

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

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

回到冰淇淋店.这次订购洒上香草锥.他们给你一个锥形的1勺香草冰淇淋和一些洒在上面的糖果.现在你不能在不改变你订购的东西的情况下取下洒水.如果你取下洒水,你将没有“香草锥洒”,你只需要一个香草锥.

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

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

编辑:

为了更严格地对待上述类比,你可以阅读@Potatoswatter引用的标准段落:

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.”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读