我可以将指向set元素的迭代器转换为LONG_PTR吗?
附言:我不完全理解什么是LONG_PTR?
以下是在运行时弹出错误的示例代码
#include <windows.h>
#include <set>
#include <string>
using namespace std;
void func(LPARAM lp)
{
set<string>::iterator *it = reinterpret_cast<set<string>::iterator*>(lp);
string s = *(*it); //runtime-error
}
int main()
{
char *arr[] = {"0", "1", "2", "3", "4", "5"};
set<string> s(arr, arr+5);
set<string>::iterator it = s.begin()++;
LONG_PTR lp = reinterpret_cast<LONG_PTR>(&*it);
func(lp);
}发布于 2011-01-11 08:13:53
LONGPTR是一种__int3264。
在任何情况下,您都不能将迭代器强制转换为此类型,因为迭代器不是指针。但是,您可以获取迭代器指向的元素的地址(使用&*it),前提是容器中存储的对象类型不会重载一元& (如果它确实重载了一元&,则它是一个非常非常糟糕的类)。
发布于 2011-01-11 08:14:47
可能不是,如果您指的是set中的std::set。通常,STL迭代器是比指针复杂得多的对象。
LONG_PTR是一个足够大的类型,可以容纳一个长指针或一个指针。
https://stackoverflow.com/questions/4652959
复制相似问题