问:为什么rust中使用isize或者usize作为某些集合的索引?
chatgpt回答:在 Rust 中,isize 和 usize 通常用作集合的索引类型,因为它们的大小可以自适应计算机架构。使用这些类型作为索引类型,可以确保代码在不同的计算机架构上都能够正常工作,而无需进行任何更改。
这意味着,在不同的计算机架构上,isize 和 usize 的大小会自适应计算机架构。例如,在 64 位架构上,isize 和 usize 的大小为 64 位,而在 32 位架构上,它们的大小为 32 位。
这种自适应的特性使得使用 isize 或 usize 作为索引类型更加灵活,因为代码可以在不同的计算机架构上编译和运行,而无需进行任何更改。这意味着您可以编写一次代码,然后将其移植到不同的计算机架构上,而无需担心类型大小不匹配的问题。
关于使用 isize 或 usize 作为索引类型更加灵活,因为代码可以在不同的计算机架构上编译和运行怎么理解呢
--------以下为初始问题------已解决-----------------------
问题
let v=vec![i32::MAX;(amount+1) as usize];
vec取值要 v[x as usize] 我理解
为什么定义中要(amount+1) as usize ?这个as usize又是为什么呢
--------以上为初始问题------已解决-----------------------
1
共 5 条评论, 1 页
评论区
写评论就是为了安全检查
谢谢,知道了
对于容器来说,usize表达元素数量这件事情是合理的。既然索引的时候应该使用usize,定义的时候也应该用usize
另一个问题
问:为什么rust中使用isize或者usize作为某些集合的索引?
chatgpt回答:在 Rust 中,isize 和 usize 通常用作集合的索引类型,因为它们的大小可以自适应计算机架构。使用这些类型作为索引类型,可以确保代码在不同的计算机架构上都能够正常工作,而无需进行任何更改。
这意味着,在不同的计算机架构上,isize 和 usize 的大小会自适应计算机架构。例如,在 64 位架构上,isize 和 usize 的大小为 64 位,而在 32 位架构上,它们的大小为 32 位。
这种自适应的特性使得使用 isize 或 usize 作为索引类型更加灵活,因为代码可以在不同的计算机架构上编译和运行,而无需进行任何更改。这意味着您可以编写一次代码,然后将其移植到不同的计算机架构上,而无需担心类型大小不匹配的问题。
关于使用 isize 或 usize 作为索引类型更加灵活,因为代码可以在不同的计算机架构上编译和运行怎么理解呢?
--
👇
MrZLeo: 可以先把宏
展开成函数调用:
可以看到真正调用的函数是
vec::from_elem
,具体实现:函数调用的n的类型就是usize。
对于容器来说,usize表达元素数量这件事情是合理的。既然索引的时候应该使用usize,那为什么定义的时候不应该呢?why not : )
--
👇
imrewang: 编译器只是让在声明时采用vec![0;i as usize],我知道改成as usize就对了,但为什么这里也要用usize类型
取值
let value = v[i as usize];
是容易理解的定义
let v = vec![0; 23usize];
是不理解的--
👇
MrZLeo: 有一个解决这个问题的简单方法:把
as usize
去掉,然后编译器会告诉你出了什么错可以先把宏
展开成函数调用:
可以看到真正调用的函数是
vec::from_elem
,具体实现:函数调用的n的类型就是usize。
对于容器来说,usize表达元素数量这件事情是合理的。既然索引的时候应该使用usize,那为什么定义的时候不应该呢?why not : )
--
👇
imrewang: 编译器只是让在声明时采用vec![0;i as usize],我知道改成as usize就对了,但为什么这里也要用usize类型
取值
let value = v[i as usize];
是容易理解的定义
let v = vec![0; 23usize];
是不理解的--
👇
MrZLeo: 有一个解决这个问题的简单方法:把
as usize
去掉,然后编译器会告诉你出了什么错编译器只是让在声明时采用vec![0;i as usize],我知道改成as usize就对了,但为什么这里也要用usize类型
取值
let value = v[i as usize];
是容易理解的定义
let v = vec![0; 23usize];
是不理解的--
👇
MrZLeo: 有一个解决这个问题的简单方法:把
as usize
去掉,然后编译器会告诉你出了什么错有一个解决这个问题的简单方法:把
as usize
去掉,然后编译器会告诉你出了什么错