я использую макросы для кодирования развернутые циклы, как это: (глупый пример)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
Остановить злоупотребление макросистемой. Именно из-за злоупотреблений, подобных тому, что вложение функций было такой обязательной особенностью C++. –
В общем, я сделал очень подробное профилирование, включая профилирование выходных данных asm с различными параметрами g ++. И разница в производительности большая, в основном из-за условной ветви в цикле. –