在 C++ 中,std::decay
是一個模板元函數,用于將給定的類型轉換為其對應的非引用、非 cv-qualified(即非 const/volatile 限定)類型。這對于處理數組和函數類型特別有用,因為它們會退化為指針類型。
以下是 std::decay
如何處理數組和函數類型的詳細說明:
std::decay
時,它會將其轉換為一個指向數組第一個元素的指針。例如,int[5]
會退化為 int*
。std::decay
時,它會將其轉換為一個指向該函數的指針。例如,void()
會退化為 void(*)()
。以下是一個使用 std::decay
處理數組和函數類型的示例:
#include<iostream>
#include <type_traits>
template<typename T>
void print_decayed_type() {
using decayed_type = typename std::decay<T>::type;
std::cout<< typeid(decayed_type).name()<< std::endl;
}
int main() {
int arr[5];
void func() {}
print_decayed_type<decltype(arr)>(); // 輸出: int*
print_decayed_type<decltype(func)>(); // 輸出: void (*)()
return 0;
}
在這個示例中,我們定義了一個名為 print_decayed_type
的模板函數,它接受一個類型參數 T
。我們使用 std::decay
來獲取 T
的退化類型,并打印其類型信息。當我們傳遞數組和函數類型給這個函數時,可以看到它們分別被退化為指針類型。