2
我今天看到下面的代码:将迭代器中的转换运算符转换为指针是个好主意吗?
options.push_back(&*i);
凡i
是一个迭代器和容器options
商店指针的*i
类型。得到的&*i
是丑了一点,我开始怀疑:
这是个好主意,添加一个转换操作符转换到
*i
指针?
你觉得呢?
我今天看到下面的代码:将迭代器中的转换运算符转换为指针是个好主意吗?
options.push_back(&*i);
凡i
是一个迭代器和容器options
商店指针的*i
类型。得到的&*i
是丑了一点,我开始怀疑:
这是个好主意,添加一个转换操作符转换到
*i
指针?
你觉得呢?
这并不难看,但也许是危险的:如果迭代器的来源i
是动态分配的并在容器options
之前被删除,则会导致容器中存在无效指针。
如果不是,这是完全有效的代码。为了使其更具可读性,你可以加括号:
options.push_back(&(*i));
,如果你不使用这个结构在你的代码,我就不会在这里使用一个转换操作符。
我会避免它;隐式转换通常是重载解析头痛的原因,再加上,当目标是一个指针时,他们默默地启用了可能对你的对象无意义的东西(比如'if(i)')。 '&*'毕竟不是那么糟糕...... – 2013-05-02 02:26:26
@ matteo-italia: 我想了很多关于这个的事情......我同意你的看法。这是一个坏主意。 – vinipsmaker 2013-05-05 17:27:40