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),它在編譯時提供型別。
但是,這兩種方法都有效且易於使用。