Dam*_*nka 1 c c++ arrays types rust
我正在尝试访问数组的元素。我确信我尝试使用的类型足以索引整个数组,而 64 位索引是多余的。
我在 C 和 C++ 方面的经验很少,我知道在那里是可能的。
我不确定几点,想问一下:
usize尝试访问数组元素时,C 和 C++ 是否将类型转换为?usizeu8fn main() {
let some_array = [10; 255];
let some_index: u8 = 255;
println!("{}", some_array[some_index])
}
Run Code Online (Sandbox Code Playgroud)
int main() {
char array[255] = {0};
char index = 12;
printf("Element: %d", array[index]);
}
Run Code Online (Sandbox Code Playgroud)
是设计选择吗?
是的,原因如下所述。
usize尝试访问数组元素时,C 和 C++ 是否将类型转换为?
是的。对数组的索引被定义为指针的算术运算,指针的usize大小根据定义(32 位系统上的 32 位等)
我可以说服/强制 Rust 使用另一种类型来访问数组元素吗?
不。好吧,有点,但不适用于任意类型。您可以SliceIndex<[T]>为您控制的类型实现,以便能够使用它来索引切片。但这仍然会通过转换为usize内部来实现。
访问类型较小的元素是否更快?(例如是<的速度 ?)
usizeu8
不,由于指针的大小始终相同,因此使用较小的类型进行索引没有速度优势。事实上,如果零扩展值迫使编译器使用更慢的指令,使用更小的类型可能会更慢。但这并不是为您的程序选择类型时要考虑的最重要的事情。
如果您将索引存储在长期存在的数据结构中,而不是仅将它们用于索引,则它可以节省内存以使用较小的类型。在这种情况下,usize在存储/检索数据结构时实现从/到的转换可能是一个好主意。
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |