将字符显示为int而不显式强制转换

Das*_*aru 4 c++ casting cout char

每次我向cout对象发送一个char时,它都会以ASCII字符显示,除非我将它转换为int.

问:有没有一种方法可以在没有显式强制转换的情况下显示char的数值?

我在某处读到,在代码中执行过多的强制转换会导致(程序的)完整性丢失.我猜测字符显示为ASCII特殊原因,但我不知道为什么.

我本质上是在创造一个游戏.我正在使用我计划显示到控制台的小数字(无符号字符).我可能是偏执狂,但每当我static_cast<int>在我的代码中发送垃圾邮件时,我都会感到不安.

Rem*_*eau 5

但是,类型转换没有任何问题,特别是如果你习惯static_cast这样做的话.这就是你应该使用的.它允许编译器验证类型转换并确保它是安全的.

要更改<<运算符的行为,您必须覆盖值的默认<<运算符char,例如:

std::ostream& operator <<(std::ostream &os, char c)
{
    os << static_cast<int>(c);
    return os;
}

char c = ...;
std::cout << c;
Run Code Online (Sandbox Code Playgroud)

您可以创建一个自定义类型,该类型接受char输入,然后<<为该类型实现运算符,例如:

struct CharToInt
{
    int val;
    CharToInt(char c) : val(static_cast<int>(c)) {}
};

std::ostream& operator <<(std::ostream &os, const CharToInt &c)
{
    os << c.val;
    return os;
}

char c = ...;
std::cout << CharToInt(c);
Run Code Online (Sandbox Code Playgroud)

你可以创建一个类似的函数,然后你不必覆盖<<运算符,例如:

int CharToInt(char c)
{
    return c;
}

char c = ...;
std::cout << CharToInt(c);
Run Code Online (Sandbox Code Playgroud)