Может ли функция возвращать одно и то же значение внутри цикла и возвращать разные значения вне цикла?

Это действует так.

fun();//return 1;
for (int i=0;i++;i<100)
fun();//return 2;
fun();//return 3;

Я не хочу делать это вручную, например:

static int i=0;
fun(){return i};
main()
{
i++;
fun();//return 1;
i++;
for (int i=0;i++;i<100)
fun();//return 2;
i++;
fun();//return 3;
}

Новые классы и статические переменные разрешены.

Я пытаюсь разработать алгоритм замены кэша. Большую часть времени я использую алгоритм LRU, но, если я использую алгоритм LRU внутри цикла, я очень вероятно получу перегрузку кеша.

https://en.wikipedia.org/wiki/Thrashing_(computer_science)

Мне нужно знать, нахожусь ли я в цикле. Тогда я могу использовать алгоритм LFU, чтобы избежать побоев.

-2

Решение

Очевидным способом сделать это было бы использование __LINE__ макро. Он вернет номер строки исходного кода, который будет отличаться во всей вашей функции.

1

Другие решения

В c ++ функция не может знать, находится ли она внутри цикла 100% времени. Однако, если вы счастливы сделать некоторое ручное кодирование, чтобы сообщить функции, что она находится внутри цикла, тогда, используя параметры по умолчанию C ++, вы можете просто реализовать решение. Для получения дополнительной информации о параметрах по умолчанию см. http://www.learncpp.com/cpp-tutorial/77-default-parameters/. Кроме того, поскольку глобальные переменные обычно не одобряются, я поместил их в отдельное пространство имен, чтобы предотвратить конфликты.

namespace global_variables {
int i = 0;
}

int func(bool is_in_loop = false) {
if (is_in_loop)
{
//do_something;
return global_variables::i;
}

else
{
//do_something_else;
return global_variables::i++;
}
}

int main()
{

// Calling function outside of loop
std::cout << func();

// Calling function inside of loop
for (int j=0;j<100;j++)
{
// is_in_loop will be overided to be true.
std::cout << function(true);
}

return 0;
}
0