函数可以 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;
}
它的行为是这样的。
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;
}