c++11:为什么 "auto&" 没有被推断为正确的类型?
c++11: why is "auto&" not inferred to the correct type?
我有以下代码:
struct MyType{};
using vec_type = std::vector<std::unique_ptr<MyType>>;
void foo(vec_type vec, vec_type& vec2, vec_type::iterator itr){
for (auto &ri = vec.rbegin(); ri != vec.rend(); ++ri) {
vec2.insert(itr, std::move(*ri));
}
}
它在 for 循环行出现以下错误:
non-const lvalue reference to type 'reverse_iterator<[...]>' cannot bind to a temporary of type 'reverse_iterator<[...]>'
然后我需要更改为以下内容才能编译:
vector<unique_ptr<Titem> >::reverse_iterator ri = replaces.rbegin();
for (; ri != vec.rend(); ++ri) {
vec2.insert(itr, std::move(*ri));
}
这对我来说没有意义 - 我没有发现这两个代码之间有任何语义差异。编译器不应该只是推断 "auto" 是 vector<unique_ptr<Titem> >::reverse_iterator
吗?
我正在使用 clang++ 3.5。
去掉 & 符号。您需要迭代器的副本,而不是对它的引用。
for (auto ri = vec.rbegin(); ri != vec.rend(); ++ri) {
编译器不会将临时值分配给非常量引用。
我有以下代码:
struct MyType{};
using vec_type = std::vector<std::unique_ptr<MyType>>;
void foo(vec_type vec, vec_type& vec2, vec_type::iterator itr){
for (auto &ri = vec.rbegin(); ri != vec.rend(); ++ri) {
vec2.insert(itr, std::move(*ri));
}
}
它在 for 循环行出现以下错误:
non-const lvalue reference to type 'reverse_iterator<[...]>' cannot bind to a temporary of type 'reverse_iterator<[...]>'
然后我需要更改为以下内容才能编译:
vector<unique_ptr<Titem> >::reverse_iterator ri = replaces.rbegin();
for (; ri != vec.rend(); ++ri) {
vec2.insert(itr, std::move(*ri));
}
这对我来说没有意义 - 我没有发现这两个代码之间有任何语义差异。编译器不应该只是推断 "auto" 是 vector<unique_ptr<Titem> >::reverse_iterator
吗?
我正在使用 clang++ 3.5。
去掉 & 符号。您需要迭代器的副本,而不是对它的引用。
for (auto ri = vec.rbegin(); ri != vec.rend(); ++ri) {
编译器不会将临时值分配给非常量引用。