- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Rust 是保护我免受这里迭代器失效的影响,还是我只是幸运 realloc
?为 &'a Vec<T>
返回的迭代器提供了哪些保证?
fn main() {
let mut v = vec![0; 2];
println!("capacity: {}", v.capacity());
{
let v_ref = &mut v;
for _each in v_ref.clone() {
for _ in 0..101 {
(*v_ref).push(1); // ?
}
}
}
println!("capacity: {}", v.capacity());
}
最佳答案
在 Rust 中,大多数方法都采用 &self
- 对自己的引用。在大多数情况下,像 some_string.len()
这样的电话在内部“扩展”成这样的东西:
let a: String = "abc".to_string();
let a_len: usize = String::len(&a); // This is identical to calling `a.len()`.
但是,考虑对对象的引用:a_ref
,这是一个 &String
引用 a
. Rust 足够聪明,可以确定是否需要添加或删除引用,就像我们在上面看到的( a
变成 &a
);在这种情况下,a_ref.len()
扩展为:
let a: String = "abc".to_string();
let a_ref: &String = &a;
let a_len: usize = String::len(a_ref); // This is identical to calling `a_ref.len();`. Since `a_ref` is a reference already, it doesn't need to be altered.
请注意,这基本上等同于原始示例,只是我们使用了对 a
的显式设置引用。而不是 a
直接。
这意味着v.clone()
扩展为 Vec::clone(&v)
,同样,v_ref.clone()
扩展为 Vec::clone(v_ref)
, 自 v_ref
是&v
(或者,特别是 &mut v
),我们可以将其简化回 Vec::clone(&v)
.换句话说,这些调用是等价的 - 调用clone()
对对象的基本引用 (&
) 不会克隆引用,它会克隆引用的对象。
换句话说,Tamas Hedgeus 的评论是正确的:您正在迭代一个新向量,它包含的元素是 v
中元素的克隆。 。在您的 for
中迭代的项目循环不是 &Vec
, 这是一个 Vec
与 v
分开,因此迭代器失效不是问题。
关于您关于 Rust 提供的保证的问题,您会发现 Rust 的借用检查器可以很好地处理这个问题,没有任何附加条件。
如果你要 remove clone()
from the for
loop,但是,您会收到一条错误消息 use of moved value: '*v_ref'
,因为 v_ref
被视为“移动”到 for
中当你迭代它时循环,并且不能用于函数的其余部分;为避免这种情况,iter
函数创建一个仅借用向量的迭代器对象,允许您在循环结束(并删除迭代器)后重用该向量。如果你尝试 iterating over and mutating v
没有 v_ref
抽象,错误显示为 cannot borrow 'v' as mutable because it is also borrowed as immutable
. v
在 v.iter()
生成的迭代器中被不变地借用(它的类型签名为 fn iter(&self) -> Iter<T>
- 注意,它对向量进行了借用),并且不允许您根据 Rust 的借用检查器改变向量,直到迭代器被删除(在 for
循环的末尾)。但是,由于您可以对单个对象有多个不可变 引用,您仍然可以读取 for 循环中的向量,只是不能写入它。
如果您需要在遍历向量时改变向量的元素,您可以使用 iter_mut
。 ,一次返回对一个元素的可变引用,并允许您仅更改该元素。你仍然不能用 iter_mut
改变迭代向量本身。 ,因为 Rust 确保一次只有 一个 对象的可变引用,并确保在与该对象的不可变引用相同的范围内没有对该对象的可变引用。 p>
关于vector - 在迭代向量时推送到向量时,Rust 会保护我免受迭代器失效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49225860/
我正在尝试进行一些高度递归的模拟和数学运算,在某些边缘情况下,我会溢出调用堆栈并获得 EXC_BAD_ACCESS 信号。将算法更改为迭代形式是不可行的,因为它是很多遗留代码。并且递归深度限制没有用,
我们有一堆调用 Python C/C++ 绑定(bind)的测试。我们用 Nose 运行这些测试: nosetests myapp ..... ----------------------------
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
我对不使用 SSL 保护 PHP session 的主题很感兴趣。 令我惊讶的是,如果中间人嗅探用户和服务器之间交换的数据包,即使已通过身份验证,也很容易窃取 session 。我知道有一些策略可以限
我对不使用 SSL 保护 PHP session 的主题很感兴趣。 令我惊讶的是,如果中间人嗅探用户和服务器之间交换的数据包,即使已通过身份验证,也很容易窃取 session 。我知道有一些策略可以限
我正在创建一个 API,下面的方法通过查询参数中的员工姓名或所有员工获取员工。但是,[FromQuery(Name = "name")] 是否可以防止 SQL 注入(inject),不确定这是否是 .
我想保护我的应用免受 XSS 攻击。我可以使用任何开箱即用的功能吗?一个外部库来保护整个应用程序的请求?还是 Tomcat 过滤器/阀? 谢谢! 最佳答案 您可以使用的选项: > Java Encod
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
这个问题在这里已经有了答案: How to prevent spoofing of DLLs in .NET (2 个答案) 关闭 7 年前。 我想保护我的 DLL 不被修补程序修改。听说对DLL进
我刚刚在我的 Azure Web 应用程序上安装了 SSL 证书。我已使用可用的 Symantec SSL 检查器工具检查安装是否正确 here . 在结果中我可以读到 BEAST This serv
我正在为一组网站设计 API。这些站点非常相似(有点像 StackOverflow、SuperUser 和 ServerFault),它们有一个共享的后端是有意义的。因此,我们决定尝试使用一个很好的
我正在开发一个使用 SQLite 作为数据库管理系统的 PHP 应用程序,MySQL 和 PostgreSQL 等不是替代方案(尽管我真的很想使用 pgsql),因为我希望设置对初学者非常友好并且为零
我们使用 native Apache Portable Runtime SSL 连接器在 Tomcat 6 上运行 Web 应用程序以提供 SSL 连接。我们如何配置服务器以防止 BEAST 攻击?。
我有一个聊天窗口(使用 )有时需要获取多行条目。到现在为止,我只是简单地替换了传入的 \n与 并显示带有 .append() 的文本.不幸的是,我发现留下一个裸体 .append()基于用户输入允许
我已经研究过这个主题,但找不到任何相关信息 我们是否需要采取任何安全措施来保护 javax.xml.transform.Transformer 免受 XML 外部实体攻击? 我做了以下,它似乎扩展了
例如,我有一个用 Node.js 编写的 REST api 端点。非技术用户可以从网页访问,也可以使用 curl 命令通过命令行访问。它不需要任何凭据即可访问它,因为它旨在对任何人开放以供访问。我要解
我托管了我的博客 Amazon Web Services S3(托管静态文件)。我是否应该添加任何策略或措施来进一步保护我的帐户免受 DDoS/高带宽消耗? 最佳答案 我认为这是一场音乐会。不是在技术
我有一个网站使用数据库为网站用户存储信息。所有 mysql 数据库调用都是 SELECT。我使用 $_GET 将变量从一个页面传递到另一个页面,然后在 mysql SELECT 调用中使用这些变量。我
我刚读过 http://www.ruby-lang.org/en/news/2013/02/06/rdoc-xss-cve-2013-0256/ ,关于 RDoc 中 XSS 攻击的报告。 我使用的是
我正在处理一个相当复杂的数学库,当客户端代码使用 auto 时,我发现了一个令人讨厌的错误。在创建一个最小的复制案例来询问有关它的问题的过程中,我意识到我可以单独使用标准库来复制类似的东西。看这个简单
我是一名优秀的程序员,十分优秀!