You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否从类型不匹配的指针构造C++引用?

问题解答

你的理解部分正确,但细节上需要纠正:

  • 首先,构造T& rt = *t;这个操作本身就属于未定义行为,原因如下:
    1. 初始化引用时必须对指针t进行解引用操作(*t),而根据C++标准,reinterpret_cast<T*>(&u)得到的指针t并不指向一个有效的T类型对象。解引用这类不指向对应类型有效对象的指针,本身就触发未定义行为——不管你后续是否通过引用rt访问对象内容。
    2. C++标准要求引用必须绑定到一个有效的同类型对象(或符合规则的特殊情况,比如派生类对象绑定到基类引用,但这里显然不适用)。用非T类型的对象u对应的T*指针解引用来初始化T&,本质是试图将引用绑定到不存在的T对象上,这直接违反了引用初始化的规则,属于未定义行为。

简单来说:哪怕你完全不使用rt,仅仅是T& rt = *t;这一行代码,就已经触发了未定义行为,你的核心结论(不能这样构造rt)是对的,但第一个理由里的“访问”表述不够准确——问题出在解引用本身就是非法操作,而非后续的访问动作。

内容的提问来源于stack exchange,提问作者Brad Spencer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:00:59