【发布时间】:2020-02-24 17:23:27
【问题描述】:
这段代码编译失败:
void foo(vector<unique_ptr<pair<int, int>>> bar)
{
bar.begin()->first;
}
这里有什么问题? operator-> 不应该向下钻取到 pair 吗?
【问题讨论】:
-
"不应该将
operator->向下钻取到pair?" 不,为什么应该这样做?它返回底层元素,即unique_ptr<pair<int, int>>。 -
它有自己的
operator->,所以通常C++调用它(通常称为operator->的向下钻取行为。 -
仅仅因为一个类有一个
operator->并不意味着它应该被自动调用。编译器如何知道何时调用它与何时不调用它?编译器如何知道您想要其中的pair,而不是unique_ptr? -
你试过 bar[0]->first 吗?
-
@HazemAbaza 当然我知道我可以只是取消引用迭代器并继续,但令人惊讶的是,我认为
operator->一直在继续,直到它遇到一个没有'没有。
标签: c++ iterator operator-overloading drilldown