首先,我有一个forward_list
:
forward_list<int> f {1, 0, 5, 4};
auto i = *(f.begin());
auto beg = f.begin();
然后我尝试从 f
构建一个 vector
,我想使用 decltype
从迭代器中获取类型。
vector<decltype(*beg)> v{f.begin(), f.end()}; // compile error
但是
vector<decltype(i)> v{f.begin(), f.end()};
效果很好。
错误信息主要与内存
有关:
error: 'pointer' declared as a pointer to a reference of type 'int &'
error: 'const_pointer' declared as a pointer to a reference of type 'int &'
最佳答案
改为使用 std::iterator_traits
:
using type = std::iterator_traits<decltype(beg)>::value_type;
std::vector<type> v{f.begin(), f.end()};
或者衰减解引用的迭代器类型
using type = std::decay_t<decltype(*beg)>;
std::vector<type> v{f.begin(), f.end()};
关于C++:如何使用 decltype 从迭代器获取类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53716847/