reinterpret_cast指向指针的迭代器

Ada*_*hip 4 c++ iterator reinterpret-cast

我有一个东西的迭代器.如果我想将当前项转换为指向该项的指针,为什么这样做:

thing_pointer = &(*it);
Run Code Online (Sandbox Code Playgroud)

但这不是:

thing_pointer = reinterpret_cast<Thing*>(it);
Run Code Online (Sandbox Code Playgroud)

这是我想要理解的编译器错误:http://msdn.microsoft.com/en-us/library/sy5tsf8z(v = vs.90).aspx

以防万一,迭代器的类型是 std::_Vector_iterator<std::_Vector_val<Thing,std::allocator<Thing> > >

j_r*_*ker 11

&(*it);
Run Code Online (Sandbox Code Playgroud)

*超载做你的意思逻辑:迭代器类型转换到其指向的对象.然后,您可以安全地获取此对象的地址.

而在

reinterpret_cast<Thing*>(it);
Run Code Online (Sandbox Code Playgroud)

您告诉编译器将it对象重新解释为指针.但它可能根本不是一个指针 - 它可能是一个50字节的结构,对于你所知道的一切!在这种情况下,它的第一个sizeof (Thing*)字节绝对不会指向任何合理的东西.

提示:reinterpret_cast<>几乎总是错的.

  • 你说过这个,但我只是想为读者澄清一下:`它`不是(必然)指针 - 它是一个对象.恰好碰巧模仿指针的对象. (2认同)