c语言如何让字符转换为as,使用C ++样式转换将int转换为char

本问题已经有最佳答案,请猛点这里访问。

在传统的C语言中,您可以做到:

int i = 48;

char c = (char)i;

//Now c holds the value of 48.

//(Of course if i > 255 then c will not hold the same value as i).

C++中的哪种方法(StasyQuestCase,RealType CAST)适合于完成这项工作?

你也可以做char c = i;,不用担心哪种类型的演员。当然,如果你这样做,你会遇到一些"到处施放"的人,他们坚持编译器警告会变成错误,然后在出现错误的地方进行修复。

您应该使用static_cast(i)将整数i转换为char。

除非您想将一个类型转换成一个根本不同的类型,否则几乎不应该使用reinterpret_cast。

另外,reinterpret_cast依赖于机器,因此安全地使用它需要完全理解类型以及编译器如何实现强制转换。

有关C++铸件的更多信息,请参见:

什么时候应该使用静态u cast、动态u cast、const u cast和reinterpret u cast?

http://www.cplusplus.com/doc/tutorial/typecasting/。

当然,假设有一个很好的理由不只是写char c = '0'…

@无用,它的含义与从int中强制转换完全不同,您将它设置为与数字0不同的字符"0"。

但与问题中的整型文字48相同,假定使用ASCII编码。我对硬编码的ASCII整型值过敏,因为字符文本的可读性更高。

另外,reinterpret_cast根本无法在整数类型之间转换;因此,是否"应该"使用它是不相关的。

@没用,这只是一个例子,在我的例子中,我没有硬编码的这个数字,我有一个枚举,我需要插入到一个字符中,我知道我不会超过255。不过谢谢。

您可以在数值类型之间隐式转换,即使这样会降低精度:

char c = i;

但是,您可能希望启用编译器警告以避免这样可能的有损转换。如果是这样,则使用static_cast进行转换。

其他演员:

dynamic_cast只适用于指针或对多态类类型的引用;

const_cast不能改变类型,只有const或volatile限定符;

reinterpret_cast用于特殊情况,在指针或引用和完全无关的类型之间转换。具体来说,它不会进行数值转换。

C样式和功能样式的强制转换可以执行static_cast、const_cast和reinterpret_cast的任何组合以完成任务。

埃多克斯1〔3〕

reinterpret_cast不能用于此转换,代码将无法编译。根据C++ 03标准部分5.2.10-1:

埃多克斯1〔15〕

该部分未列出此转换。即使这是无效的:

long l = reinterpret_cast(i)

static_cast是这里必须使用的。看看这个和这个问题。

使用静态强制转换可能会导致如下结果:

// This does not prevent a possible type overflow

const char char_max = -1;

int i = 48;

char c = (i & char_max);

要防止可能的类型溢出,可以执行以下操作:

const char char_max = (char)(((unsigned char) char(-1)) / 2);

int i = 128;

char c = (i & char_max); // Would always result in positive signed values.

如果重新解释,那么Cast可能会直接转换为char,而没有任何Cast安全性。->如果你也可以使用静态模式,就不要使用reinterpret-cast。如果在类之间进行强制转换,静态强制转换还将确保两种类型匹配(对象是强制转换类型的派生)。

如果您的对象是一个多态类型,而您不知道它是哪个类型,那么您应该使用动态类型转换,动态类型转换将在运行时执行类型检查,如果类型不匹配,则返回nullptr。

如果您需要const-cast,那么您很可能做了一些错误的事情,应该考虑可能的替代方法来修复代码中的const正确性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值