Поэтому я пытаюсь оптимизировать некоторый код. У меня есть функция с циклом переменного размера. Однако для эффективности я хочу сделать чехлы с петлями 1, 2 и 3 размера, специальные случаи, которые полностью развернуты. Мой подход до сих пор заключается в том, чтобы объявить размер цикла как константный параметр, а затем определить функции-оболочки, которые вызывают основную функцию, передавая ей литерал для константного значения. Я включил фрагмент кода, иллюстрирующий то, что я имею в виду.
inline void someFunction (const int a)
{
for (int i=0; i<a; i++)
{
// do something with i.
}
}
void specialCase()
{
someFunction (3);
}
void generalCase(int a)
{
someFunction (a);
}
Итак, мой вопрос: разумно ли ожидать, что мой компилятор (GCC) развернет цикл for внутри specialCase. Я имею в виду, что, очевидно, я могу скопировать и вставить содержимое someFunction в specialCase и заменить a на 3, но я бы предпочел иметь дело только с одним определением someFunction в моем коде для ясности.
do_something_with(i)
отдельной (встроенной) функцией и позволить компилятору выполнить копирование дляdo_something_with(1); do_something_with(2);
. - person Bo Persson   schedule 18.09.2017