我在读的一本书中遇到过以下例子:
#include <vector>
template <typename T>
void f1(std::vector<t>& vec)
{
for (T&& v :vec) { v = true;}
for (auto&& v : vec) { v = true;}
}
void f2()
{
using IntVec = std::vector<int>;
using BoolVec = std::vector<bool>;
IntVec iv = { /* ...*/};
BoolVec bv = {/*...*/};
f1(iv);
f1(bv);
}
带有 T&& 的循环无法编译 IntVec,因为无法从左值初始化右值引用
参考;
BoolVec 确实可以编译,但它被写入不会更新容器。为什么 ?以及为什么汽车&&案例
IntVec 和 BoolVec 都会编译和更新容器吗?
我不明白为什么 for(T&& v:vec) 与 for(auto&& v: vec) 不同?