表达(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