C++中指针转引用再转回指针,是否能保证得到原指针?
我的理解
- 在C++中,普通值可以通过
&value转换为指向自身的指针,或通过隐式转换得到自身的引用。 - 与Rust不同,引用并非真正的一等类型,而只是部分类型声明位置可接受的一种二元限定符。引用可以被透明地当作其引用对象使用,隐藏内部指针¹。因此,我们可以直接使用
&refToValue获取指向引用对象的指针。
问题
**若将指针转换为引用,再转回指针,是否能保证得到原始指针?**在Rust中情况确实如此,但Rust的引用是作为抽象指针的“常规”一等类型。
// Sample code by @chi T x; T* ptr1 = &x; T& ref = *ptr1; T* ptr2 = &ref; assert(ptr1 == ptr2); // Is that always true according to the spec?
¹: 我知道C++标准并未要求引用必须以指针的方式实现,但我想不到除了特定上下文优化外的其他实现方式,尤其是如果最终问题的答案为“是”的话。
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

