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

C++中指向typeid运算符返回值的指针是否始终有效?

关于typeid返回值指针有效性的确认

我认为&typeid(T)得到的指针始终有效,比如&typeid(int)在编译阶段就已确定,不会因为离开任何作用域而失效。

示例

如果我的假设成立,以下代码不应触发未定义行为(至少在我的测试环境中能正常运行):

int main() {
    const std::type_info* pType = nullptr; 
    {
        pType = &typeid(int);
    }
    std::cout << pType->name() << std::endl;
}

我的目标

假设我定义了如下MyTest类:

struct MyTest {
    const std::type_info* pType;
    MyTest(const std::type_info& type) : pType(&type) {}
    void printType() { std::cout << pType->name() << std::endl; }
};

那么下面这段代码同样不会产生未定义行为——哪怕MyTest构造函数的参数看起来是“局部”的:

int main() {
    MyTest myTest(typeid(double));
    myTest.printType();
}

我知道有另一篇讨论聚焦于能否通过比较typeid返回值的指针来判断类型是否一致,但这不是我当前的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:44:54