我正在学习 C++。 我了解到引用可以让我们避免复制。 因此,我尝试获取 vector 的迭代器作为覆盖其元素的引用。
// simplified function
std::vector<int>::iterator& GetIterator(std::vector<int>& vec) {
return vec.begin(); // compiler said that here is an error.
}
但是编译器给我一条错误信息并建议使用 const 引用。 我不想使用常量。 为什么它不能获得非常量引用? 或者如何避免迭代器的复制? 非常感谢。
最佳答案
有时您可以使用引用来避免复制 - 但在这里您需要一个拷贝。 vec.begin()
的结果是一个临时的,当你的函数返回时它就不再存在了。如果您想要函数外部的值 - 而您确实这样做了 - 则需要一个拷贝。 (如果你在这里成功地形成了一个引用,那将是一个“悬挂引用”,这不是一件好事。)
在任何情况下,很多类型都被设计成可以高效复制,迭代器就是其中之一。事实上,编译器通常可以为您避免复制,而您根本不需要做任何工作——这就是其中一种情况。
因此没有引用的代码更简单、正确并且已经是最优的。
关于c++ - 为什么它不能在 C++ 中获取迭代器作为引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41921429/