joshsulin 发表于 2020-11-23 20:28
Rust中的数组拥有固定的长度,一旦声明就再也不能随意更改. 应该很容易就能发现非法的数组元素访问问题吧? 有一点疑惑, 为什么编译器不能在编译阶段报出来?
如果代码里写个魔法数字当下标当然可以检查,关键是下标可以来源于文件,随机,网络等
你试试不就知道了,下面的代码我复制下来,rust-analyzer和ructc都会报错说下标可能越界。
-- 👇 joshsulin: 比如: 针对这样的代码.
fn main() { let a = [1, 2, 3, 4, 5]; let index = 10; let element = a[index]; println!("The value of element is: {}", element); }
是不是编译器应该检测到
-- 👇 lagudomeze: 用户输入的一个index呢?这个只能运行时决定吧
比如: 针对这样的代码.
用户输入的一个index呢?这个只能运行时决定吧
如果是一个函数参数做index呢?
评论区
写评论如果代码里写个魔法数字当下标当然可以检查,关键是下标可以来源于文件,随机,网络等
你试试不就知道了,下面的代码我复制下来,rust-analyzer和ructc都会报错说下标可能越界。
--
👇
joshsulin: 比如: 针对这样的代码.
fn main() { let a = [1, 2, 3, 4, 5]; let index = 10; let element = a[index]; println!("The value of element is: {}", element); }
是不是编译器应该检测到
--
👇
lagudomeze: 用户输入的一个index呢?这个只能运行时决定吧
比如: 针对这样的代码.
fn main() { let a = [1, 2, 3, 4, 5]; let index = 10; let element = a[index]; println!("The value of element is: {}", element); }
是不是编译器应该检测到
--
👇
lagudomeze: 用户输入的一个index呢?这个只能运行时决定吧
用户输入的一个index呢?这个只能运行时决定吧
如果是一个函数参数做index呢?