考虑以下代码:
void function (char arg)
{
// function's content
}
int main(void)
{
long double x = 1.23456;
function(x);
}
我给函数一个不应该得到的参数。为什么不引起错误?
它是隐式转换的。
在赋值,参数传递,return
语句和其他几个上下文中,如果目标类型也是算术类型,则任何算术类型的表达式都将隐式转换为目标类型。在这种情况下,double
参数将隐式转换为char
。(这种特殊的转换很少有意义,但是就语言而言是有效的。)
请注意,对于可变参数(例如,格式字符串后面的参数),不会进行此隐式转换print
,因为编译器不知道目标类型是什么。printf("%d\n", 1.5)
不1.5
从转换double
为int
; 而是具有不确定的行为。
还有一些使用不同类型的运算符评估表达式的规则。我不会在这里详细介绍所有细节,但是例如:
int n = 42;
double x = 123.4;
如果您写入n + x
,n
则在执行加法之前将的值从提升(隐式转换)int
到double
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句