【发布时间】:2013-04-17 06:35:51
【问题描述】:
使用 BOOST 的 ForEach 和我自己的自定义 #define 宏来迭代容器有什么区别??
我的:
#define iterate(i,x) for(typeof(x.begin()) i=x.begin();i!=x.end();++i)
boost:
#include <string>
#include <iostream>
#include <boost/foreach.hpp>
int main()
{
std::string hello( "Hello, world!" );
BOOST_FOREACH( char ch, hello )
{
std::cout << ch;
}
return 0;
}
请解释哪种方法更好,为什么?
【问题讨论】:
-
Boost 可能已将其代码配置为在没有非标准
typeof扩展名的编译器上运行。 -
一个区别是
BOOST_FOREACH与普通数组一起工作,即char a[] = {"Hello, world!"};。 -
你不应该依赖
typeof,那不是标准的 C++。你应该使用decltype -
@MariusBancila 如果您有一个支持
decltype的编译器,那么它很可能也支持基于范围的for循环,在这种情况下,这两个宏都是不必要的。编辑:但是,再想一想,我认为 VS2010 支持前者,但不支持后者:-S -
@Praetorian,完全同意。
标签: c++ boost macros iterator boost-iterators