为什么 std::vector::iterator::operator-> 只向下钻取一层?
Why does std::vector::iterator::operator-> only drill down one level?
此代码无法编译:
void foo(vector<unique_ptr<pair<int, int>>> bar)
{
bar.begin()->first;
}
这里有什么问题? operator->
不应该向下钻取直到 pair
吗?
Shouldn't operator->
drill down until pair
?
operator ->
的递归仅在您获得指针类型之前有效。一旦发生这种情况,递归就会停止,您可以访问该指针指向的内容。在这种情况下,std::vector::iterator::operator->
returns a unique_ptr<pair<int, int>>*
作为向量中元素的指针类型。一旦你点击了那个指针,你就只能访问 unique_ptr
的成员,而不是它指向的 pair<int, int>
的成员。
你可以得到你想要的使用
(*bar.begin())->first;
所以现在您正在使用 unique_ptr<pair<int, int>>
中的 operator->
。
此代码无法编译:
void foo(vector<unique_ptr<pair<int, int>>> bar)
{
bar.begin()->first;
}
这里有什么问题? operator->
不应该向下钻取直到 pair
吗?
Shouldn't
operator->
drill down untilpair
?
operator ->
的递归仅在您获得指针类型之前有效。一旦发生这种情况,递归就会停止,您可以访问该指针指向的内容。在这种情况下,std::vector::iterator::operator->
returns a unique_ptr<pair<int, int>>*
作为向量中元素的指针类型。一旦你点击了那个指针,你就只能访问 unique_ptr
的成员,而不是它指向的 pair<int, int>
的成员。
你可以得到你想要的使用
(*bar.begin())->first;
所以现在您正在使用 unique_ptr<pair<int, int>>
中的 operator->
。