面试题答案
一键面试- 隐式类型转换过程及精度损失:
- 过程:在
int func() { double num = 3.14; return num; }
中,当执行return num;
时,由于函数返回类型是int
,而num
是double
类型,会发生隐式类型转换。隐式类型转换会将double
类型的值截断为int
类型。对于浮点数转整数,会舍弃小数部分,只保留整数部分。所以3.14
会被转换为3
。 - 精度损失:这里丢失了小数部分
.14
,导致精度损失。浮点数能表示的范围和精度通常比整数大,这种转换会丢失小数部分的信息,使得转换后的值与原始值不完全相同。
- 过程:在
- 显式类型转换实现函数:
int explicitConvert(float f) {
return static_cast<int>(f);
}
- 显式和隐式类型转换区别:
- 显式类型转换:通过
static_cast<int>(f)
这种方式明确告知编译器要进行类型转换,代码阅读者能清楚看到类型转换操作,提高代码可读性和可维护性。同时,在一些情况下,显式类型转换能让编译器更好地检查潜在的类型转换错误,例如当转换可能不安全时,编译器可能会给出警告。 - 隐式类型转换:在
func
函数中,隐式类型转换由编译器自动执行,代码中没有明确的转换标识。虽然隐式转换在简单场景下看起来简洁,但可能导致代码阅读者忽略类型转换的存在,并且隐式转换可能在复杂代码中引入不易察觉的错误,因为编译器会按照其默认规则进行转换,可能与开发者预期不符。
- 显式类型转换:通过