輸入屬性
Version >= C++ 11
型別屬性比較可以放在不同變數上的修飾符。這些型別特徵的有用性並不總是顯而易見的。
注意: 下面的示例僅對非優化編譯器提供改進。這是一個簡單的概念證明,而不是複雜的例子。
例如,快四分。
template<typename T>
inline T FastDivideByFour(cont T &var) {
// Will give an error if the inputted type is not an unsigned integral type.
static_assert(std::is_unsigned<T>::value && std::is_integral<T>::value,
"This function is only designed for unsigned integral types.");
return (var >> 2);
}
是常數:
當型別為常量時,這將評估為真。
std::cout << std::is_const<const int>::value << "\n"; // Prints true.
std::cout << std::is_const<int>::value << "\n"; // Prints false.
是易變的:
當型別為 volatile 時,這將評估為 true。
std::cout << std::is_volatile<static volatile int>::value << "\n"; // Prints true.
std::cout << std::is_const<const int>::value << "\n"; // Prints false.
已簽名:
對於所有簽名型別,這將評估為 true。
std::cout << std::is_signed<int>::value << "\n"; // Prints true.
std::cout << std::is_signed<float>::value << "\n"; // Prints true.
std::cout << std::is_signed<unsigned int>::value << "\n"; // Prints false.
std::cout << std::is_signed<uint8_t>::value << "\n"; // Prints false.
未簽名:
對於所有無符號型別,將評估為 true。
std::cout << std::is_unsigned<unsigned int>::value << "\n"; // Prints true.
std::cout << std::is_signed<uint8_t>::value << "\n"; // Prints true.
std::cout << std::is_unsigned<int>::value << "\n"; // Prints false.
std::cout << std::is_signed<float>::value << "\n"; // Prints false.