函数可以 return 循环内的相同值,而循环外 return 不同的值吗?

Can a function return the same value inside a loop, and return different values outside of loops?

它的行为是这样的。

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算法来避免抖动。

一个明显的方法是使用 __LINE__ 宏。它将 return 源代码行号,这在整个函数中都是不同的。

在 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;
}