3 回答

TA贡献1772条经验 获得超5个赞
此分析基于n4567,并使用其中的节号。
§5.2.10/ 7:当v对象指针类型的prvalue 转换为对象指针类型“指向cv T的指针”时,结果为static_cast<cv T*>(static_cast<cv void*>(v))。
所以,在这种情况下,它reinterpret_cast<X*>(buffer)是相同的static_cast<X *>(static_cast<void *>(buffer))。这使我们看到有关的相关部分static_cast:
§5.2.9/ 13:类型为“指向cv1 void的指针”的prvalue可以转换为类型为“指向cv2 T的指针”的prvalue ,其中T是对象类型,cv2与cv-qualification相同或更高cv-qualification比cv1。空指针值将转换为目标类型的空指针值。如果原始指针值表示A存储器中字节的地址并A满足对齐要求T,则结果指针值表示与原始指针值相同的地址,即A。
我相信这足以说原始报价是正确的 - 这种转换给出了明确的结果。
至于寿命,这取决于你所说的一生。强制转换创建了一个指针类型的新对象 - 一个临时对象,它具有从演员阵容所在的行开始的生命周期,并在它超出范围时结束。如果有两个不同的转换有条件地发生,则每个指针的生命周期都从创建它的转换的位置开始。
这些都不会影响提供底层存储的对象的buffer生命周期,无论是否为该存储创建指针(具有相同或转换类型),它仍具有完全相同的生命周期。
- 3 回答
- 0 关注
- 476 浏览
添加回答
举报