gpt4 book ai didi

c++ - 在 C++ 中比较 char 和 Int

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:18 24 4
gpt4 key购买 nike

在 C++ 中,由于隐式类型转换,可以将 int 与 char 进行比较吗?还是我误解了这个概念?

比如,我能不能做

int x = 68;
char y;
std::cin >> y;
//Assuming that the user inputs 'Z';
if(x < y)
{
cout << "Your input is larger than x";
}

还是我们需要先将其转换为 int?

所以

 if(x < static_cast<int>(y)) 
{
cout << "Your input is larger than x";
}

最佳答案

两个 版本的问题是您无法确定由负值/大值产生的值(如果 char 确实是 符号字符)。这是实现定义的,因为实现定义了 char 是指 signed char 还是 unsigned char

解决此问题的唯一方法是首先转换为适当的有符号/无符号 char 类型:

if(x < (signed char)y)

if(x < (unsigned char)y)

省略此转换将导致实现定义的行为。

就个人而言,我通常更喜欢使用 uint8_tint8_t 将字符用作数字,正是因为这个问题。


这仍然假定 (un)signed char 的值在您平台上可能的 int 值范围内。如果 sizeof(char) == sizeof(int) == 1(仅当 char 为 16 位时才有可能!),并且您正在比较,情况可能并非如此有符号和无符号值。

为避免此问题,请确保您使用其中之一

signed x = ...;
if(x < (signed char)y)

unsigned x = ...;
if(x < (unsigned char)y)

如果您不这样做,您的编译器可能会提示并警告混合符号比较。

关于c++ - 在 C++ 中比较 char 和 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22883451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com