this
指针的值在特定对象的生存期内是否保证是恒定的?我无法想象它会改变的情况,但不知道我是否不缺少任何东西。
在特定对象的生存期内
this
指针的值是否保证是恒定的?
是。
正如用户Aconcagua所说:this
指针总是的值是在1上调用了函数的对象的地址值。因此,问题等同于:
对象可以在整个生命周期内更改其内存地址吗?
根据lifetime
2]的定义,这是不可能的。对象的生存期从获取对象的时间或之后开始,到释放对象的生存期结束。
1]
[class.this]/1
在非静态(
,其值是指向调用该函数的对象的指针。[class.this]/1
)成员函数的主体中,关键字[class.mfct]
是prvalue2)
this
(强调我的意思)对象或引用的生存期是对象或引用的运行时属性。如果变量是默认初始化的,则该变量被称为具有空虚的初始化;如果它是类类型或其(可能是多维)数组,则该类类型具有琐碎的默认构造函数。
:[basic.life]/1
类型的对象的生存期开始于:
- << [storage具有正确的对齐方式和大小对于类型
[basic.life]/1
,获得,和其初始化(如果有的话)是完整的(包括虚空初始化)(T
),除了如果对象是联合成员或其子对象,则其生存期仅在该联合成员是联合中的初始化成员时才开始(T
,[dcl.init]
),或如[dcl.init.aggr]
中所述。类型为
[class.base.init]
的对象[class.union]
的生存期在以下时间结束如果
o
是非类类型,则对象被销毁,或- 如果
T
是类类型,则析构函数调用开始,或者- 释放对象占用的存储空间
,或由未嵌套在T
(T
)中的对象重用。
o
指向那里。