mgchao 发表于 2021-05-26 23:40
Tags:rust
搞不懂 rust 的设计啊
if let Some(x)=queue.pop_front(){ temp.push(x) }
这么写不好吗?
做了非空的检查,同时避开了borrow可能会悬空的问题
……还是说你只是想玩一个UAF?
话说你的第二层unwrap是什么?pop_front没必要unwrap两次的
pop_front
unwrap
cpp可以连着写, 然后看着你挂。 auto x = std::string("").c_str();
明白,大佬。
-- 👇 苦瓜小仔: unwrap 返回的是具有所有权的数据,可以转移中间变量的所有权。
但是如果可以借用中间变量,那不就是悬垂指针了吗。。。
-- 👇 mgchao: 难道方法会返回一个中间变量,borrow 的是中间变量,所以不可以创建? 好奇怪。
-- 👇 其实是想着有没有更快的解决方案,感觉语句很罗嗦。
-- 👇 苦瓜小仔: 是的。编译器都提示你了,变量在语句最后被 free,所以不可能 borrow。
unwrap 返回的是具有所有权的数据,可以转移中间变量的所有权。
是的。编译器都提示你了,变量在语句最后被 free,所以不可能 borrow。
难道方法会返回一个中间变量,borrow 的是中间变量,所以不可以创建? 好奇怪。
评论区
写评论这么写不好吗?
做了非空的检查,同时避开了borrow可能会悬空的问题
……还是说你只是想玩一个UAF?
话说你的第二层unwrap是什么?
pop_front
没必要unwrap
两次的cpp可以连着写, 然后看着你挂。 auto x = std::string("").c_str();
明白,大佬。
--
👇
苦瓜小仔:
unwrap
返回的是具有所有权的数据,可以转移中间变量的所有权。但是如果可以借用中间变量,那不就是悬垂指针了吗。。。
--
👇
mgchao: 难道方法会返回一个中间变量,borrow 的是中间变量,所以不可以创建? 好奇怪。
--
👇
其实是想着有没有更快的解决方案,感觉语句很罗嗦。
--
👇
苦瓜小仔: 是的。编译器都提示你了,变量在语句最后被 free,所以不可能 borrow。
--
👇
mgchao: 难道方法会返回一个中间变量,borrow 的是中间变量,所以不可以创建? 好奇怪。
unwrap
返回的是具有所有权的数据,可以转移中间变量的所有权。但是如果可以借用中间变量,那不就是悬垂指针了吗。。。
--
👇
mgchao: 难道方法会返回一个中间变量,borrow 的是中间变量,所以不可以创建? 好奇怪。
是的。编译器都提示你了,变量在语句最后被 free,所以不可能 borrow。
--
👇
mgchao: 难道方法会返回一个中间变量,borrow 的是中间变量,所以不可以创建? 好奇怪。
难道方法会返回一个中间变量,borrow 的是中间变量,所以不可以创建? 好奇怪。