【问题标题】:c++ dereference a pointer to an iterator [closed]c ++取消引用指向迭代器的指针[关闭]
【发布时间】:2019-01-24 07:33:04
【问题描述】:

这个问题与stackoverflow 上的另一个问题有关。

在下面的 c++ 代码中,*input_ 是一个迭代器还是一个指向迭代器的指针?

所以node_insert() 返回一个迭代器并将其分配给*input_。这让我认为*input_ 不是指向迭代器的指针,因为如何将迭代器分配给指向迭代器的指针。

此时迭代器指向图形容器中的一个元素。这是正确的吗?

(*input_) 是否取消引用迭代器(或指向迭代器的指针)?

我不明白为什么迭代器周围需要大括号来调用方法setOutputTensor()

我有点困惑。

Data::OpListIterator *input_;
*input_ = dataGraph_.node_insert(allocator_.make_owner<op::Input>(shape, dType, order, opName));
(*input_)->setOutputTensor(outputTensor, 0);

【问题讨论】:

  • 该代码中有很多未指定的类型。你可以让它独立(即minimal reproducible example)吗?这样做将帮助您获得更好的答案。
  • “我不明白为什么需要大括号”与您在此处提出的问题相同:stackoverflow.com/questions/51880506/…。请避免每个问题超过一个问题,并请避免两次问同一个问题

标签: c++ pointers stl iterator dereference


【解决方案1】:

如果你正在使用

*input_->setOutputTensor(outputTensor, 0);

等于

*input_*.setOutputTensor(outputTensor, 0);

所以在这种情况下 input_ 被取消引用(这会产生一个迭代器)然后函数 setOutputTensor 在迭代器上被调用并会导致一个错误。

如果您正在使用(*input_),则指向迭代器的指针首先被取消引用,然后再次被-&gt; 取消引用。所以使用大括号的主要区别在于取消引用的顺序。

【讨论】:

    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多