Ale*_*tto 1 c++ macros containers
在关于TopCoder的Dmitry Korolev教程之后,我遇到了这个泛型容器遍历宏:
#define tr(c,i) for(typeof((c).begin() i = (c).begin(); i != (c).end(); i++)
Run Code Online (Sandbox Code Playgroud)
它让我困惑,因为它似乎缺少一个括号.在解释中,他说typeof(...)被表达式(...)的类型所取代,这让我对这个遍历宏更加困惑(因为我的直觉看到typeof(x; y; z)和因为x; y; z不是表达式,即使它工作了typeof(...)也会"吃掉"(...)).
它有用吗?为什么?
#define tr(container, it) \
for(typeof(container.begin()) it = container.begin(); \
it != container.end(); \
it++
)
Run Code Online (Sandbox Code Playgroud)
这是他写的语法正确的.BTW typeof是gcc扩展,不适用于其他编译器.
如果您的编译器支持C++ 0x,您可能想要使用 auto
例如,相同的宏可以用C++ 0x编写
#define tr(container, it) \
for(auto it = container.begin(); \
it != container.end(); \
it++
)
Run Code Online (Sandbox Code Playgroud)