在 C++ 中,std::decay
是一個模板元函數,用于將給定的類型轉換為其“衰減”后的類型。這通常用于從函數參數類型、引用類型或表達式類型中提取基礎類型。對于自定義類型,std::decay
的行為與內置類型相同。
以下是 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;
}
class MyClass {};
int main() {
print_decayed_type<MyClass>(); // 輸出: MyClass
print_decayed_type<MyClass&>(); // 輸出: MyClass
print_decayed_type<const MyClass&>(); // 輸出: MyClass
print_decayed_type<MyClass&&>(); // 輸出: MyClass
print_decayed_type<MyClass*>(); // 輸出: MyClass*
print_decayed_type<const MyClass*>(); // 輸出: MyClass const*
print_decayed_type<MyClass[3]>(); // 輸出: MyClass*
print_decayed_type<MyClass(int)>(); // 輸出: MyClass (*)(int)
print_decayed_type<int MyClass::*>(); // 輸出: int MyClass::*
print_decayed_type<int (MyClass::*)()>(); // 輸出: int (MyClass::*)()
return 0;
}
在這個例子中,我們定義了一個名為 MyClass
的自定義類型,并使用 print_decayed_type
函數模板打印其衰減后的類型。可以看到,對于自定義類型,std::decay
的行為與內置類型相同。