C++ 11 auto /我不明白的东西

Joe*_*.Dc 4 c++ c++11

好.这是我的代码:

CShop::~CShop()
{
    TPacketGCShop pack;
    pack.header = HEADER_GC_SHOP;
    pack.subheader  = SHOP_SUBHEADER_GC_END;
    pack.size = sizeof(TPacketGCShop);
    Broadcast(&pack, sizeof(pack));
    GuestMapType::iterator it;
    it = m_map_guest.begin();
    while (it != m_map_guest.end())
    {
        LPCHARACTER ch = it->first;
        ch->SetShop(NULL);
        ++it;
    }
    M2_DELETE(m_pGrid);
}
Run Code Online (Sandbox Code Playgroud)

所以我有GuestMapType::iterator it;和这个it = m_map_guest.begin();

如果我像这样做我的功能,那很好吗?

CShop::~CShop()
{
    TPacketGCShop pack;
    pack.header = HEADER_GC_SHOP;
    pack.subheader  = SHOP_SUBHEADER_GC_END;
    pack.size = sizeof(TPacketGCShop);
    Broadcast(&pack, sizeof(pack));

    auto it = m_map_guest.begin();
    while (it != m_map_guest.end())
    {
        LPCHARACTER ch = it->first;
        ch->SetShop(NULL);
        ++it;
    }
    M2_DELETE(m_pGrid);
}
Run Code Online (Sandbox Code Playgroud)

我删除了GuestMapType :: iterator; 简化我的代码?我的问题是.影响我的程序?有风险吗?

Pao*_*o M 5

auto从我的观点来看,这完全没问题并且声明迭代器是一个很好的做法,至少有两个原因:

1-通常,迭代器的类型很长.输入的次数越少,误输的次数就越少.它使代码更清晰,因为在这种情况下隐藏了一个并不重要的实现细节.

2- 向前兼容性:当您修改代码时,即迭代器类型名称的名称时,您不必更改使用它的代码auto.毕竟,您希望独立于其名称使用该类型的迭代器.