我正在尝试从迭代器中获取常规指针,但是关于我得到的类型正在发生一件非常奇怪的事情。我只是发布代码,我假设这两个片段彼此相等,但如果我错了,请告诉我。导致片段的代码是:
CallbackTrigger trigger(triggerParameters);
std::set<CallbackTrigger> triggerSet;
auto result = triggerSet.insert(trigger);
片段一:
auto whatIGet = &(*result.first); // whatIGet is type:
// "const std::allocator<CallbackTrigger>::value_type *"
片段 B:
auto arbitraryStep = *result.first;
auto whatIWanted = &arbitraryStep; // this is type "CallbackTrigger*"
存在这种差异并拒绝使用代码段 A 编译的代码是当我尝试将指针推送到列表时
std::list<CallbackTrigger*> listing;
listing.push_back(whatIWanted); // compiles fine
listing.push_back(whatIGet); // error: "cannot convert parameter 1 from
// 'const CallbackTrigger* to 'CallbackTrigger *&&'"
这里发生了什么?