2013-05-02 56 views
2

我今天看到下面的代码:将迭代器中的转换运算符转换为指针是个好主意吗?

options.push_back(&*i); 

i是一个迭代器和容器options商店指针的*i类型。得到的&*i是丑了一点,我开始怀疑:

这是个好主意,添加一个转换操作符转换到*i指针?

你觉得呢?

+6

我会避免它;隐式转换通常是重载解析头痛的原因,再加上,当目标是一个指针时,他们默默地启用了可能对你的对象无意义的东西(比如'if(i)')。 '&*'毕竟不是那么糟糕...... – 2013-05-02 02:26:26

+0

@ matteo-italia: 我想了很多关于这个的事情......我同意你的看法。这是一个坏主意。 – vinipsmaker 2013-05-05 17:27:40

回答

2

这并不难看,但也许是危险的:如果迭代器的来源i是动态分配的并在容器options之前被删除,则会导致容器中存在无效指针。
如果不是,这是完全有效的代码。为了使其更具可读性,你可以加括号:

options.push_back(&(*i)); 

,如果你不使用这个结构在你的代码,我就不会在这里使用一个转换操作符。