知识卡片

隐式转换很窄

普通读书笔记卡 · 1470.a

内容

Go 的隐式转换主要服务常量,而不是让变量之间自由互转。这样避免了 C 系语言常见的静默截断和符号错误;发散:少一点便利,换来更少隐藏 bug。

参考来源

- 位置:《Go语言底层原理剖析》第4章《常量与隐式类型转换》4.2.1节《隐式整数转换》 - 结论依据:原文明确"在Go语言中,变量之间没有隐式类型转换,不同的类型之间只能强制转换。但是,编译器可以进行变量和常量之间的隐式类型转换",并举例说明整数常量123可隐式转换为int,但涉及截断的转换(如浮点常量转整数变量且有小数部分)会报错,因此可以推出"隐式转换只窄向服务常量、且不能截断"的结论。 - 原始内容:在Go语言中,变量之间没有隐式类型转换,不同的类型之间只能强制转换。但是,编译器可以进行变量和常量之间的隐式类型转换。如下所示,将整数常量123隐式转换为int。由于常量不使用小数点或指数,因此采用的类型为整数。只要不需要截断,就可以将类型为整数的未命名常量隐式转换为有符号和无符号命名常量。