この式は、または(kHit >= kForeground)値を持つブール値を生成します。単項が適用されると、は に昇格し、変換はforまたはfor になります。昇格後、記号はorに変更され、外部キャストによって変換されます。truefalse-boolint1true0false-10uchar
重要な情報は、単項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。