我用宏的代码展开的循环是这样的:(愚蠢的例子)C++循环宏
#define foreach_small_prime(p, instr) { \
int p; \
p = 2; instr; \
p = 3; instr; \
p = 5; instr; \
p = 7; instr; \
}
foreach_small_prime(pp, cout << pp);
int sum = 0;
foreach_small_prime(pp, {
sum += pp;
if (sum >= 10) cout << sum << endl;
});
但在某些情况下,我可能会使用的结构:
#define foreach_small_even(ii) for(int ii = 0; ii < 20; ii += 2)
int sum = 0;
foreach_small_even(pp) {
sum += pp;
if (sum >= 10) cout << sum << endl;
}
我喜欢这个宏,因为我可以通过一个变量作为参数名称。
问题:有没有像第二个宏那样的像第一个宏那样定义循环的方法?
快速问题,你发现这个展开实际上提高了性能?如果你没有通过配置来证明它确实如此。你应该考虑编写“明显”的方式,让编译器对你很聪明。 – user83255 2009-05-06 14:08:23
停止滥用宏观系统。正是由于这样的滥用,函数内联才是C++的一个必需特性。 – 2009-05-06 14:39:46
事实上,我做了一个非常详细的分析,包括各种g ++选项的asm输出分析。性能差异很大,主要是由于循环中的条件分支。 – 2009-05-06 15:13:35