【问题标题】:Conversion from std::vector<T>::iterator to void * [closed]从 std::vector<T>::iterator 转换为 void * [关闭]
【发布时间】:2016-05-02 14:00:58
【问题描述】:

我正在尝试将std::vector&lt;T&gt;::iterator 转换为void *,但由于转换错误而出现编译器错误。有什么办法吗?

【问题讨论】:

  • 你能显示代码和适用的错误吗?
  • 不,没有办法做到这一点。如果您通过这样做来描述您试图解决的问题,您可能会得到实际问题的有效解决方案。 (这看起来像 XY problem)。
  • 如果编译器在抱怨,那么你可能做的很糟糕。

标签: c++ c++11 vector iterator


【解决方案1】:

只需通过取消引用获取指向向量元素的指针:

vector<Type>::iterator i = ...;
void* data = &*i;

或者到矢量数据:

void* data = vec.data();

【讨论】:

  • 或者只是void *data = static_cast&lt;void *&gt;(vec.data());
  • @ForceBru 甚至放弃强制转换:每个指针都可以隐式转换为(但不能来自)void*
  • struct evil { char* operator&amp;() const { return nullptr; } }; std::vector&lt;evil&gt;: &amp; 在泛型代码中不可靠。
  • Yakk,看这个问题讨论通用地址:stackoverflow.com/questions/6494591/…
猜你喜欢
  • 2016-03-31
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 2022-11-21
  • 2016-11-26
  • 2013-03-06
相关资源
最近更新 更多