C++11 auto/我有些不懂
C++11 auto /I dont understand something
好的。这是我的代码:
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);
}
Soo我有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);
}
我删除了GuestMapType::迭代器it;简化我的代码?我的问题是。这会影响我的程序吗?有风险吗?
这很好,在我看来,用auto
声明迭代器是一种很好的做法,至少有两个原因:
1-一般来说,迭代器的类型很长。你打字越少,你打字错误的次数就越少。它也使代码更加清晰,因为在该上下文中隐藏了一个无关紧要的实现细节。
2-前向兼容性:当您修改代码时,即迭代器类型名称的名称,您不必更改与auto
一起使用的代码。毕竟,您希望使用这种类型的迭代器,与它的名称无关。
如果m_map_guest.begin()
的返回类型可以确定为GuestMapType::iterator
,则应该没有差异。
auto
类型并不是什么神奇的动态/弱类型,它只是编译器的一个指标,它应该计算出strong类型本身,而不需要明确它1。两条线之间存在无功能差异:
int i = 7;
auto i = 7;
因为编译器使用第二示例中的CCD_ 8的类型来推断CCD_。
您通常应该尽可能使用auto
,原因与您应该在C:中使用第二个相同
ttype *x = malloc(sizeof (ttype));
ttype *x = malloc(sizeof (*x));
如果类型更改为其他类型,则后者只需要一个更改-这在auto
中变得更加重要,因为实际类型和声明可以更广泛地分离。
1当然,如果返回类型不同,例如隐式转换或子类,编译器就更难确定您想要的类型。因此,在这些情况下,它可能不起作用。
相关文章:
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 为什么结构化绑定不使用"auto&"返回对结构成员的引用,而是返回成员本身
- Eulers 项目问题 no 345 听不懂几行代码
- 为什么 std::gcd/lcm 返回 std::common_type_t<M, N> 而不是 auto?
- C++:处理错误,看不懂我的错误
- 我不知道ROS代码的含义,也看不懂ros维基的例子
- 在 QGraphicsScene 中拖动 QPixmap:如何避免 lambda 参数中不允许'auto'
- 看不懂C++11模板函数参数推导
- 听不懂"std::cout"
- 看不懂二叉搜索功能
- 不懂一些C++语法
- 关于"make_shared"的错误,我看不懂
- 什么时候应该使用 decltype(x) 而不是 auto 来声明变量的类型
- 有什么理由不使用 auto& 进行C++基于范围的 for 循环?
- 听不懂MPI_Bcast
- Qt串口,当我写的时候,我看不懂我写的东西
- 如何在不使用 auto 的情况下声明 std::make_tuple 结果的类型
- 返回枚举,看不懂代码行
- 如何用函数指针(不带auto)声明lambda
- C++11 auto/我有些不懂