如果将int作为参数传递给接受字节(char)的方法,C/C++如何处理?int被截断了吗?或者是其他东西?
例如:
void method1()
{
int i = //some int;
method2(i);
}
void method2(byte b)
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)
int如何"转换"为一个字节(一个字符)?它会被截断吗?
如果byte代表char类型,则行为将取决于char您的平台上是已签名还是未签名.
如果char是无符号,则原始int值将减小到unsigned char模数范围UCHAR_MAX+1.[0, UCHAR_MAX]范围中的值将保留.C语言规范将此过程描述为
...通过重复加或减一个可以在新类型中表示的最大值来转换该值,直到该值在新类型的范围内.
如果chartype是signed,则[SCHAR_MIN, SCHAR_MAX]保留范围内的值,而此范围之外的任何值都以某种实现定义的方式转换.(C语言另外明确允许在这种情况下引发实现定义的信号.)即,没有普遍的答案.请参阅平台的文档.或者,更好的是,编写不依赖于任何特定转换行为的代码.