< 返回版块

mgchao 发表于 2021-05-26 23:40

Tags:rust

搞不懂 rust 的设计啊 运行结果 运行结果

评论区

写评论
Neutron3529 2021-06-01 15:37
if let Some(x)=queue.pop_front(){
  temp.push(x)
}

这么写不好吗?

做了非空的检查,同时避开了borrow可能会悬空的问题

……还是说你只是想玩一个UAF?


话说你的第二层unwrap是什么?pop_front没必要unwrap两次的

rustdesk 2021-05-29 08:14

cpp可以连着写, 然后看着你挂。 auto x = std::string("").c_str();

作者 mgchao 2021-05-27 00:00

明白,大佬。

--
👇
苦瓜小仔: unwrap 返回的是具有所有权的数据,可以转移中间变量的所有权。

但是如果可以借用中间变量,那不就是悬垂指针了吗。。。

--
👇
mgchao: 难道方法会返回一个中间变量,borrow 的是中间变量,所以不可以创建? 好奇怪。

作者 mgchao 2021-05-26 23:58

--
👇
其实是想着有没有更快的解决方案,感觉语句很罗嗦。

--
👇
苦瓜小仔: 是的。编译器都提示你了,变量在语句最后被 free,所以不可能 borrow。

--
👇
mgchao: 难道方法会返回一个中间变量,borrow 的是中间变量,所以不可以创建? 好奇怪。

苦瓜小仔 2021-05-26 23:58

unwrap 返回的是具有所有权的数据,可以转移中间变量的所有权。

但是如果可以借用中间变量,那不就是悬垂指针了吗。。。

--
👇
mgchao: 难道方法会返回一个中间变量,borrow 的是中间变量,所以不可以创建? 好奇怪。

苦瓜小仔 2021-05-26 23:52

是的。编译器都提示你了,变量在语句最后被 free,所以不可能 borrow。

--
👇
mgchao: 难道方法会返回一个中间变量,borrow 的是中间变量,所以不可以创建? 好奇怪。

作者 mgchao 2021-05-26 23:49

难道方法会返回一个中间变量,borrow 的是中间变量,所以不可以创建? 好奇怪。

1 共 7 条评论, 1 页