gpt4 book ai didi

c# - 如果编译器可以对整数文字执行隐式缩小转换,那么它也应该

转载 作者:太空狗 更新时间:2023-10-30 00:58:47 26 4
gpt4 key购买 nike

如果编译器能够将整数文字隐式转换为字节类型并将结果赋值给 b ( b = 100; ),为什么它不能也隐式赋值表达式 a+100 的结果( result 是 integer 类型) 到 b?

        byte a = 10;
byte b = a; //ok
b = 100; //ok
b = a + 100;//error - explicit cast needed
b = (byte)(a + 100); // ok

谢谢

最佳答案

一切都与静态类型安全有关——在编译时,我们是否可以安全地知道表达式的类型。使用文字,编译器可以正确判断它是否可以转换为字节。在 byte a = 20 中,20 是可转换的,因此一切顺利。 byte a = 257 不行(257不能转换)

byte b = a 的情况下,我们已经知道 a 是一个字节,所以类型安全是有保证的。 b = 100 再次正常(静态已知 100 是可转换的)。

b = a + 100 中,不是静态知道 a + 100 是否是一个字节。 a 可能包含 200,因此 a + 100 不能表示为一个字节。因此,编译器会利用您更高级别的程序员知识,强制您通过强制转换告诉它“是的,a + 100 始终是一个字节”。

某些类型的更高级类型系统不会遇到此问题,但会带来大多数程序员不喜欢的问题。

关于c# - 如果编译器可以对整数文字执行隐式缩小转换,那么它也应该,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2231648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com