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

如何在C++中判断数据类型?是否有类似Python type()的函数?

C++中类似Python type()的类型判断方法

C++是静态类型语言,类型信息在编译阶段就已确定,没有和Python type()完全等价的运行时类型获取函数,但可以通过以下方式实现类型判断:

编译/运行时通用的typeid运算符

typeid可以获取类型的std::type_info对象,通过其name()方法返回类型名称(格式取决于编译器)。示例代码:

#include <iostream>
#include <typeinfo>

int main() {
    int x = 20;
    // GCC输出"i",MSVC输出"int"
    std::cout << typeid(x).name() << std::endl;
    return 0;
}

编译期类型判断(模板元编程)

通过自定义模板特化,在编译阶段就能明确类型名称,避免运行时开销:

#include <iostream>

template<typename T>
struct TypeName {
    static const char* get() { return "unknown type"; }
};

// 为int类型特化
template<>
struct TypeName<int> {
    static const char* get() { return "int"; }
};

int main() {
    int x = 20;
    std::cout << TypeName<decltype(x)>::get() << std::endl;
    return 0;
}

多态类的运行时类型判断

对于包含虚函数的继承体系,typeid可以识别对象的实际类型,也可结合dynamic_cast进行类型校验:

#include <iostream>
#include <typeinfo>

class Base {
public:
    virtual ~Base() = default; // 虚函数确保多态
};

class Derived : public Base {};

int main() {
    Base* obj = new Derived();
    if (typeid(*obj) == typeid(Derived)) {
        std::cout << "对象实际类型为Derived" << std::endl;
    }
    delete obj;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:20:36