gpt4 book ai didi

c++11 - 为什么我需要两次将迭代器解引用到智能指针而不是使用 operator->()?

转载 作者:行者123 更新时间:2023-12-03 08:07:12 24 4
gpt4 key购买 nike

假设我有以下代码:

#include <iostream>
#include <deque>
#include <memory>

struct Test
{
int test;
};

int main(int, char**)
{
std::deque<std::unique_ptr<Test>> deque;
deque.push_back(std::unique_ptr<Test>(new Test{10}));
auto start = deque.begin();
std::cout << start->test << std::endl; // <- compilation error
std::cout << (start.operator->())->operator->()->test << std::endl; // <- OK
}

为什么将智能指针视为常规指针对象,尽管它不是(据我所知)?据我所知, operator->()应该会重复,直到达到 T* .

以下是一些相关问题 on how arrow overloading worksthat we need to dereference twice instead of an arrow .

最佳答案

对于迭代器 it , 表达式 it->m相当于 (*i).m ,从技术上讲,这意味着迭代器的 operator->返回 原始指针 到包含的对象。在您的情况下,这意味着它返回一个指向 unique_ptr 的原始指针。 .最后一个 operator->应用于该对象,最终得到对所包含对象的引用。这就是为什么没有进一步链接 operator->发生。

关于c++11 - 为什么我需要两次将迭代器解引用到智能指针而不是使用 operator->()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26144829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com