`this` 指针的值在对象的生命周期内是常量吗?

Dan*_*ica 19 c++ this object-lifetime language-lawyer

this指针的值是否保证在特定对象的生命周期内保持不变?我无法想象它会改变的情况,但不知道我是否没有遗漏一些东西。

YSC*_*YSC 28

this指针的值是否保证在特定对象的生命周期内保持不变?

是的

正如用户Aconcagua所说:this指针的值始终是在1 上调用函数的对象的地址值。所以这个问题等价于:

对象可以在生命周期内更改其内存地址吗?

根据lifetime2的定义,这是不可能的。一个对象的生命周期在它的存储被获取时或之后开始,在它被释放之前结束。


1) [class.this]/1

在非静态 ( [class.mfct]) 成员函数的主体中,关键字this是一个纯右值,其值是指向调用该函数的对象的指针。

2) [basic.life]/1(强调我的)

对象或引用的生命周期是对象或引用的运行时属性。如果一个变量是默认初始化的,并且如果它是类类型或其(可能是多维的)数组,则该类类型具有一个平凡的默认构造函数,则称该变量具有空初始化。 类型对象的生命周期T开始于

  • 存储与所述适当的对准和尺寸类型T获得,并
  • 其初始化(如果有)已完成(包括空初始化) ( [dcl.init]),但如果对象是联合成员或其子对象,则其生命周期仅在联合成员是联合中的初始化成员时才开始 ( [dcl.init.aggr], [class.base.init]),或作为中描述[class.union]

o类型对象的生命周期在以下情况下T结束

  • 如果T是非类类型,则对象被销毁,或
  • 如果T是类类型,则析构函数调用开始,或
  • 对象占用的存储空间被释放,或者被一个没有嵌套在o( [intro.object]) 中的对象重用。


Cal*_*eth 8

一个对象有一个存储区域。this点那里。

[intro.object]/1

一个对象在其构建期间 ( [class.cdtor])、整个生命周期和销毁期间 ( [class.cdtor])占据一个存储区域。