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