在C99中,将类型为size_t的变量安全地转换为int类型是可能的吗?这取决于你对“安全性”的理解。类型size_t的最大表示值通常比int类型的最大表示值大。如果你想知道是否可以在不丢失信息的情况下将所有size_t值转换为int类型,那么对于你的实现来说,答案可能是“不行”,而在可移植性方面,则肯定是“不行”的。如果你想知道是否可能检测到size_t值太大而无需尝试执行显式转换,以避免实现定义的结果和可能信号在值超出范围并回退到某种优雅失败的情况下,则答案是“是”。你可以安全地将涉及的值与INT_MAX进行比较。适当的值保持转换将自动应用于将<=或>运算符的操作数带到公共类型,并且该操作将产生适当的结果。 我知道size_t是无符号的,但在需要int表示的情况下,我们该怎么办?如果你只是询问语法,假设你想要转换的值总是可以表示为int类型,那么你可以使用强制转换(int x; x =(int)my_size_t_value;),但在某些情况下你实际上不需要做任何事情。特别地,在这种情况下,你可以直接将size_t分配给int变量,或直接将其传递给具有区域原型的非可变参数函数的int参数,在这些情况下,适当的转换将自动执行。
size_t
强制转换为int
之前,您可以通过检查其范围来安全地进行转换。如果它超出了有效的int
范围,则无法进行转换。 - Weather Vane