c++ - 为什么它不能在 C++ 中获取迭代器作为引用?

标签 c++

我正在学习 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/

相关文章:

c++ - std::async 在指定 launch::async 时不执行

c++ - 使用 Win32/MFC 将 HTML 文件转换为 PDF

c++ - 函数模板特化与模板

c++ - 线程给出错误答案的 200 万以下所有素数的总和

c++ - 寻找指针的来源

c++ - 二维阵列中的沟槽

c++:搜索忽略重音字符

C++ 首先休眠于 "couts"

c++ - 如何使用 main() 构建支持多个目标的 makefile

c++ - 第一次毁灭从何而来?