该表达式(kHit >= kForeground)
产生一个具有值true
或的布尔值false
。当应用一元-
时,bool
被提升为int
,并且转换产生1
fortrue
或0
for false
。升级后,符号变为-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
模板来测试传递参数的类型int
(简单到足以理解)。如果我们调用模板作为参数类型推导将设置为表达式的类型。如果您运行该程序,您将看到它打印出.bool
same_type
f
-true
T
-true
Is int? true\nIs bool? false