首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LONG_PTR的迭代器

LONG_PTR的迭代器
EN

Stack Overflow用户
提问于 2011-01-11 08:10:59
回答 2查看 756关注 0票数 0

我可以将指向set元素的迭代器转换为LONG_PTR吗?

附言:我不完全理解什么是LONG_PTR?

以下是在运行时弹出错误的示例代码

代码语言:javascript
复制
#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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-11 08:13:53

LONGPTR是一种__int3264

在任何情况下,您都不能将迭代器强制转换为此类型,因为迭代器不是指针。但是,您可以获取迭代器指向的元素的地址(使用&*it),前提是容器中存储的对象类型不会重载一元& (如果它确实重载了一元&,则它是一个非常非常糟糕的类)。

票数 3
EN

Stack Overflow用户

发布于 2011-01-11 08:14:47

可能不是,如果您指的是set中的std::set。通常,STL迭代器是比指针复杂得多的对象。

LONG_PTR是一个足够大的类型,可以容纳一个长指针或一个指针。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4652959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档