對於簡單的變數型別,我們可以通過typeid().name()
來輸出
#include
#include
//所需標頭檔案
using
namespace std;
intmain()
執行上述程式,您將會得到以下結果:b c i f d l
其含義為對應變數型別的簡寫。但是這種方式只適用於基礎變數型別,當遇到結構體、容器介面卡(eg. vector)時,將產生不易理解的結果,例如下述程式所示:
#include
#include
#include
#include
#include
using
namespace std;
intmain()
;struct
student[10]
;//匿名結構體陣列
string str =
"mr_xzz"
; stack<
int> stacktest;
vectorfloat
>
> vectest;
cout<<
typeid
(color)
.name()
typeid
(student)
.name()
typeid
(str)
.name()
typeid
(stacktest)
.name()
typeid
(vectest)
.name()
}
執行上述程式,您將會得到以下結果:
z4maine5color
a10_z4maineut_
ss
st5stackiist5dequeiisaiieee
st6vectoris_ifsaifeesais1_ee
關於typeid().name()輸出的格式為這裡看不懂沒關係,總之這說明[指標][命名空間][類別][模板]
[指標]:若是指標則輸出p。
[命名空間]:若是std則輸出st,若是自定義的命名空間則輸出字元數及它的名字,並在開頭加n,在結尾加e。
[類別]:若是自定義的命名空間則輸出字元數及它的名字
[模板]:型別模板以i開頭,以e結尾;常數模板以l開頭,以e結尾。只有整型變數(int、char之類的)才能做為常數模板,浮點數不行。
引用自:
gcc
的輸出是經過修飾的,而如果您用的是vc
的編譯環境,則不會出現上述修飾,直接返回完整型別名稱,為了去掉gcc
的修飾,可以使用__cxa_demangle 。
其核心**為:
#include
// 所需標頭檔案
char
* realname = abi::
__cxa_demangle
(typeid
(color)
.name()
,nullptr
,nullptr
,nullptr
);
仍然用之前的資料型別,這次使用__cxa_demangle,對比輸出效果
#include
#include
#include
#include
#include
#include
#include
// 所需標頭檔案
using
namespace std;
intmain()
;struct
student[10]
; string str =
"mr_xzz"
; stack<
int> stacktest;
vectorfloat
>
> vectest;
// char* realname = abi::__cxa_demangle(typeid(color).name(), nullptr, nullptr, nullptr);
cout<<
typeid
(color)
.name()
<<
" => "
<__cxa_demangle
(typeid
(color)
.name()
,null
,null
,null
)
typeid
(student)
.name()
<<
" => "
<__cxa_demangle
(typeid
(student)
.name()
,null
,null
,null
)
typeid
(str)
.name()
<<
" => "
<__cxa_demangle
(typeid
(str)
.name()
,null
,null
,null
)
typeid
(stacktest)
.name()
<<
" => "
<__cxa_demangle
(typeid
(stacktest)
.name()
,null
,null
,null
)
typeid
(vectest)
.name()
<<
" => "
<__cxa_demangle
(typeid
(vectest)
.name()
,null
,null
,null
)
}
執行上述程式,可得結果如下:
__cxa_demangle可以實現複雜型別的直觀輸出。
C C ,判斷變數的型別
python用久了,c c 也就慢慢還給老師了 在python中,利用type 函式,可以很方便的判斷變數型別。但是在c c 中,判斷變數型別,卻不簡單 c 中,可以利用typeid 來判斷變數型別。第一步 建立test.cpp檔案,輸入以下 include includeusing namespa...
C C 中變數的儲存型別
變數可能存放在三個位置 普通記憶體 靜態儲存區 程式執行堆疊 硬體暫存器。在函式體外定義的和在函式體內定義的並宣告為static型別的儲存在靜態儲存區中,在程式執行之前建立,在程式退出後銷毀。在函式體內定義的預設為 auto 自動變數,儲存在堆疊中,函式返回後,這些變數被銷毀。關鍵字register...
關於變數資料型別的幾點討論 一
variant 變數的格式有 ole定義,可以存放任何型別的資料,並以下圖的格式用 16個位元組存放某些變數。0 12 78 15 vartype unused value 第 0和1位元組儲存乙個整數值,以指明在第 8 15 位元組中存放的是何種型別的資料,第2到 7位元組一般情況下沒有用,並且在...