-2

它的行为是这样的。

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

4

2 回答 2

1

一个明显的方法是使用__LINE__宏。它将返回源代码行号,这在您的函数中会有所不同。

于 2015-10-03T05:30:51.237 回答
0

在 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;
}
于 2015-10-03T08:23:30.040 回答