为什么 for 范围循环中的引用代理的 T&& 和 auto&& 之间的右值引用不同

问题描述 投票:0回答:0

我在读的一本书中遇到过以下例子:

#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) 不同?

c++ c++11 c++14
© www.soinside.com 2019 - 2024. All rights reserved.