c++11:std::is_same

_李白_發表於2020-11-25

標頭檔案:<type_traits>

定義:

template< class T, class U >
struct is_same;

功能:        
若 T 與 U 指名同一型別(考慮 const/volatile 限定),則提供等於 true 的成員常量 value 。否則 value 為 false

滿足交換律,即對於任何二個型別 T 與 U , 若有is_same<T, U>::value == true 必有 is_same<U, T>::value == true

#include <iostream>
#include <type_traits>
#include <cstdint>

void print_separator()
{
    std::cout << "-----\n";
}

int main()
{
    std::cout << std::boolalpha;

    // 一些實現定義狀況
    std::cout << std::is_same<int, std::int32_t>::value << '\n';
    // 若 'int' 為 32 位則通常為 true
    std::cout << std::is_same<int, std::int64_t>::value << '\n';
    // 若使用 ILP64 資料模型則可能為 true

    print_separator();

    // 'float' 決非整數型別
    std::cout << std::is_same<float, std::int32_t>::value << '\n'; // false

    print_separator();

    // 'int' 為隱式的 'signed'
    std::cout << std::is_same<int, int>::value << "\n";          // true
    std::cout << std::is_same<int, unsigned int>::value << "\n"; // false
    std::cout << std::is_same<int, signed int>::value << "\n";   // true

    print_separator();

    // 不同於其他型別, 'char' 既非 'unsigned' 亦非 'signed'
    std::cout << std::is_same<char, char>::value << "\n";          // true
    std::cout << std::is_same<char, unsigned char>::value << "\n"; // false
    std::cout << std::is_same<char, signed char>::value << "\n";   // false
}

相關文章