表達(kHit >= kForeground)
產生具有價值true
或false
一個布爾值。當應用一元-
時,bool
被提升爲int
,並且true
或0
對false
的轉換產量爲1
。升級後,標誌變爲-1
或0
,然後通過外部轉換將其轉換爲uchar
。
請注意,重要的信息位是一元operator-
未應用於布爾值,但布爾值轉換爲int
,然後應用它。這可以用一點神奇的模板進行測試:
template <typename T, typename U>
struct same_type {
static const bool value = false;
};
template <typename T>
struct same_type<T,T> {
static const bool value = true;
};
template <typename T>
void f(T value) {
std::cout << "Is int? " << std::boolalpha << same_type<T, int>::value << "\n";
std::cout << "Is bool? " << same_type<T, bool>::value << "\n";
}
int main() {
f(-true);
}
的f
模板通過使用上述same_type
模板(足夠的瑣碎理解)測試對int
和bool
傳遞的參數的類型。如果我們將f
模板與-true
作爲參數類型推理,將T
設置爲表達式-true
的類型。如果你運行該程序,你會看到它打印Is int? true\nIs bool? false
。
這是有道理的,而且我可以很容易地測試和發現我自己的東西。感謝您如此簡潔地指出它。 – Wraith967 2012-07-18 15:18:33
從技術上講,布爾表達式產生'true'或'false',當提升爲'int'時,將得到值'1'或'0'。 – 2012-07-18 15:28:41