c++ - 使用 auto 迭代指针的 const vector

标签 c++ c++11 auto ranged-loops

假设我有以下常量指针 vector :

const std::vector<Component*> components;

我想迭代它并只调用该 vector 的一个元素上的方法。这样做是否正确:

for (const auto& item : components) {
  method(item);
}

与使用有什么区别:

for (auto item : components) {
  method(item);
}

与:

void method(Components* component);

最佳答案

Is it correct to do

这取决于你。

对于第一种情况,item 的类型将为 Component* const&,它是绑定(bind)到 vector 元素的引用.

对于第二种情况,item的类型将为Component*,它(即指针本身)是从 vector 的元素复制的.

method的参数类型是Component*,意味着通过值/拷贝传递指针,那么两种情况之间没有实际区别。对于指针(作为内置类型),只需 auto item : Components 就可以了。

关于c++ - 使用 auto 迭代指针的 const vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48204486/

相关文章:

c++ - C++/11 auto 关键字是在效率更高时将参数推导为按引用传递,还是始终按值传递?

c++ - SFINAE 和 decltype(自动)

c++ - 尝试在 FuncType 参数中使用 Void 函数时遇到错误

c++ - 在 C++ 中,首先发生的是返回对象的拷贝还是本地对象的析构函数?

当 RHS 具有多个字符串或字符时,C++11 += 运算符不起作用

c++ - boost::serialize 和 std::chrono::system_clock::time_point

c++ - 如何编写一个完美的缩写函数模板?

c++ - 如何从静态 C 和 C++ 库创建共享 C 库?

c++ - 如何为我的 AVL 树创建析构函数?

performance - 为什么 std::pair 比 std::tuple 更快