C++:如何使用 decltype 从迭代器获取类型

标签 c++ c++11 decltype

首先,我有一个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/

相关文章:

c++ - 为什么访问基类指针 vector 中的派生类成员会返回错误?

c++ - 不能通过引用传递从函数返回的指针

c++ - Qt - 设置.o文件的输出路径

c++ - Linux Pybind11 'build check -j 4' 错误

string - 自动将 C 风格字符串解释为 std::string 到 Boost Property 树 .get 函数

c++ - 在指向成员的指针声明中使用 'decltype' 是否有效?

c++ - 获取 const 方法的地址

c++ - 在动态链接中,.exe更新时如何知道去哪里搜索库?

C++:使用后缀设置时间

c++ - 尾随返回类型、decltype 和 const-ness