C++ 獲取變數型別
本文將探討在標準 C++ 中查詢變數資料型別的不同方法。
C++ 獲取變數型別
在某些情況下,我們需要在 C++ 中查詢變數的動態型別或執行時的型別。因此,C++ 庫為我們提供了不同的方法來查詢變數的型別。
其中一種方法是使用 C++ 的 <typeinfo>
庫中的 typeid
運算子。但是,另一種已在 C++11 中引入,稱為 decltype(x)
,它將表示式轉換為生成的結果的型別。
在舊版本的 C++ 中,每種資料型別都必須在編譯時顯式宣告;但是,在較新的版本中,有一種工具可以自動推斷表示式中的資料型別,這稱為型別推斷。decltype()
運算子還提供了自動推導表示式中資料型別的功能。
但是,我們將在本文中詳細討論每種方法。
在 C++ 中使用 typeid
運算子查詢變數的型別
typeid
運算子存在於 C++ 的 <typeinfo>
庫中,用於查詢執行時提供的變數型別。但是,用於查詢變數型別的完整函式是 typeid(x).name()
,其中 x
是應該找到其型別的變數。
使用的 name()
成員函式返回標識變數型別的字元序列。
但是,它將返回資料型別的首字母作為輸出。例如,對於 int
,它將返回 i
,對於 float``f
,對於 double
,它將返回 d
作為型別。
讓我們看看在 C++ 中使用 typeid
運算子來查詢變數型別的程式碼。
#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
int x = 200;
float y = 200.790;
cout << typeid(x).name() << endl;
cout << typeid(y).name() << endl;
cout << typeid(x*y).name() << endl;
return 0;
}
輸出:
i
f
f
上面的輸出顯示 i
指的是 integer
型別,而 f
指的是 float
型別。此外,C++ 中的 typeid
也用於返回表示式的型別。
在上面的例子中,在 typeid
運算子中傳遞的表示式是兩種不同資料型別 int
和 float
的乘積;因此,結果將被轉換為更大的資料型別。
在 C++ 中使用 decltype()
說明符查詢變數的型別
decltype(x)
說明符是在 C++11 中引入的。它是一個運算子,用於獲取結果表示式的型別。
auto
關鍵字用於宣告具有特定型別的變數,而 decltype
提取該變數型別。auto
和 decltype
都基於型別推斷,即自動推斷資料型別。
讓我們看一個使用 decltype
運算子在 C++ 中查詢變數型別的示例。
#include <bits/stdc++.h>
#include <cstring>
using namespace std;
float function1() { return 4.5; }
int function2() { return 34; }
int main()
{
decltype(function1()) a;
decltype(function2()) b;
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
return 0;
}
輸出:
f
i
上例中變數 a
和 b
的資料型別將與 function1
和 function2
的返回型別相同。
decltype
運算子的另一個示例如下,它提取 C++ 中表示式的型別。
#include <bits/stdc++.h>
using namespace std;
int main()
{
float ft = 4.8;
decltype(ft) a = ft + 9.8;
cout << typeid(a).name();
return 0;
}
輸出:
f
輸出 f
指的是 float
資料型別。因此,新增表示式 ft+9.8
後,結果資料型別將是 float
。
然而,typeid
和 decltype
運算子之間的主要區別在於 typeid
在執行時提供有關型別的資訊,而 decltype
在編譯時提供型別資訊。
まとめ
在本文中,我們討論瞭如何在 C++ 中獲取變數的型別。我們討論了兩種不同的方法;一種是使用 typeid(x).name()
,它在執行時提供型別,而另一種是 decltype(x)
,它在編譯時提供型別。
但是,這兩種方法都有效且易於使用。