为什么类型铸件仅在这句话中失败
Why type cast failed only in this sentence?
当我尝试通过此句子打印十六进制数字时,我会遇到这一点:
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');
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 这句话是什么意思 - " vector<long long> distance(n, std::numeric_limits<long long>::max()); "?
- 这句话是什么意思? "ret += (sx+ey)%2 ? 3 : 1, sx++;"
- 这句C++是什么意思?BaseWindow() : m_hwnd(NULL) { }.
- 这句话是什么意思?半 += 字符串(频率[i] / 2, i + 'a');
- 为什么类型铸件仅在这句话中失败
- 为什么这句话"The expression can be used only as the left-hand operand of a member function call"在 [expr.re
- 我需要知道这句话在 c++ 中的解释" b = (c > 5) ? a/c/2 : 0; "
- qt c++ 中的这句话是做什么的
- 我不明白这句话是什么意思?
- A obj2(A tmp) ;这句话C++是什么意思
- 这句话在c++中的意思是什么
- 这句话的意思是什么
- 这句话"while(a[i]--!=0)"做什么?
- 这句话"a class is an object even if not instantiated"是什么意思?
- 这句话是什么意思?
- 这句话作为英语句子到底是什么意思?
- 这句话"自动迭代=第一"发生了什么
- 这句话在 C++11 标准第 §3.2/2 段中是什么意思?
- C++,这句话是什么意思