为什么类型铸件仅在这句话中失败

Why type cast failed only in this sentence?

本文关键字:这句话 失败 类型 为什么      更新时间:2023-10-16

当我尝试通过此句子打印十六进制数字时,我会遇到这一点:

cout << (a > 9 ? (char)('A' + a - 10) : a);

但是,当a > 9时,它会打印一个整数,而不是字符。但是

cout << (char)('A' + a - 10);

效果很好。为什么那样去做?我该如何解决?感谢您的任何提示。

在编译时确定表达式的类型,不能取决于运行时条件。当条件(又名第三纪(表达式中的两个结果表达式不同时,它们必须转换为公共类型,这是整个表达式的类型。有关详细信息,请参见'?:'的返回类型。

在您的情况下,a大概是int,而(char)('A' + a - 10)char,因此常见类型是int,因此cout使用其方法来打印int而不是char

而不是第三纪,请使用普通的if

if (a > 9) {
    cout << static_cast<char>('A' + a - 10);
} else {
    cout << a;
}

或在做条件的之后施放到 char

cout << static_cast<char>(a > 9 ? ('A' + a - 10) : ('0' + a));

尝试此

cout << (char)(a > 9 ? ('A' + a - 10) : a + '0');