亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

c++中如何使用typeid獲取類型信息_c++ typeid獲取類型信息用法

冰火之心
發(fā)布: 2025-10-15 21:28:02
原創(chuàng)
904人瀏覽過
typeid用于運行時獲取類型信息,需包含<typeinfo>頭文件;通過typeid(變量).name()獲取類型名,可比較類型是否相同;與多態(tài)結合時能返回實際對象類型,但類須含虛函數(shù);gcc/clang中需demangle解析可讀類型名,MSVC則直接可讀;適用于調(diào)試和類型識別,但有性能開銷和平臺差異。

c++中如何使用typeid獲取類型信息_c++ typeid獲取類型信息用法

在C++中,typeid 是用于運行時獲取對象或數(shù)據(jù)類型的類型信息的一種機制,它定義在 typeinfo 頭文件中。使用 typeid 可以判斷變量、表達式或類的類型,常用于調(diào)試、日志記錄或與多態(tài)結合進行類型識別。

包含頭文件

要使用 typeid,必須包含標準頭文件:

#include <typeinfo>

否則編譯器會報錯:未定義的標識符 'typeid'。

基本用法:獲取變量類型名

typeid(變量).name() 返回一個表示類型名稱的字符串(通常是經(jīng)過修飾的名稱)。

立即學習C++免費學習筆記(深入)”;

示例:

#include <iostream>
#include <typeinfo>
using namespace std;

int main() {
????int a;
????double b;
????cout << "a 的類型: " << typeid(a).name() << endl;
????cout << "b 的類型: " << typeid(b).name() << endl;
????return 0;
}

輸出可能為:

a 的類型: i
b 的類型: d

注意:.name() 返回的是編譯器相關的類型縮寫,例如:

  • i 表示 int
  • d 表示 double
  • f 表示 float
  • N1...E 這類可能是類名的mangled name(名稱修飾)

使用 typeid 比較類型是否相同

可以直接使用 == 或 != 比較兩個 typeid 結果。

示例:

if (typeid(a) == typeid(int)) {
????cout << "a 是 int 類型" << endl;
}

這在需要根據(jù)類型執(zhí)行不同邏輯時很有用。

微信 WeLM
微信 WeLM

WeLM不是一個直接的對話機器人,而是一個補全用戶輸入信息的生成模型。

微信 WeLM33
查看詳情 微信 WeLM

與多態(tài)和基類指針結合使用

當作用于多態(tài)類型的解引用指針時,typeid 能返回實際對象的動態(tài)類型(運行時類型),前提是該類至少有一個虛函數(shù)。

示例:

#include <iostream>
#include <typeinfo>
using namespace std;

class Base {
public:
????virtual ~Base() {} // 必須有虛函數(shù)
};

class Derived : public Base {};

int main() {
????Base* ptr = new Derived;
????cout << "指針指向的實際類型: " << typeid(*ptr).name() << endl;
????delete ptr;
????return 0;
}

輸出可能顯示 Derived 類的名稱(經(jīng)過修飾),說明 typeid(*ptr) 獲取的是實際對象類型,而不是指針聲明類型。

若去掉虛函數(shù),typeid(*ptr) 將只返回 Base 類型。

獲取更可讀的類型名(demangle)

gcc/clang 中 .name() 返回的是 mangled name??赏ㄟ^ abi::__cxa_demangle 解析為可讀名稱。

示例:

#include <iostream>
#include <typeinfo>
#include <cxxabi.h>
#include <memory>

template <typename T>
std::string type_name(const T& t) {
????int status;
????char* demangled = abi::__cxa_demangle(typeid(t).name(), nullptr, nullptr, &status);
????if (status == 0 && demangled != nullptr) {
????????std::string result(demangled);
????????free(demangled);
????????return result;
????} else {
????????return typeid(t).name();
????}
}

int main() {
????double x = 3.14;
????cout << "x 的類型: " << type_name(x) << endl;
????return 0;
}

輸出:

x 的類型: double

注意:此方法僅適用于支持 ABI 的編譯器(如 g++、clang++),MSVC 不需要 demangle,通常直接可讀。

基本上就這些。掌握 typeid 有助于在復雜程序中調(diào)試類型問題,尤其是在涉及繼承和多態(tài)時。不過要注意性能開銷和跨平臺差異。不復雜但容易忽略細節(jié)。

以上就是c++++中如何使用typeid獲取類型信息_c++ typeid獲取類型信息用法的詳細內(nèi)容,更多請關注php中文網(wǎng)其它相關文章!

c++速學教程(入門到精通)
c++速學教程(入門到精通)

c++怎么學習?c++怎么入門?c++在哪學?c++怎么學才快?不用擔心,這里為大家提供了c++速學教程(入門到精通),有需要的小伙伴保存下載就能學習啦!

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學習
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號