假设我有一个名为 caller 的函数,它将调用名为 callee 的函数:
void caller()
{
callee();
}
现在,调用者可能在应用程序中被多次调用,而您希望确保被调用者仅被调用一次。 (一种延迟初始化),您可以使用标志来实现它:
void caller()
{
static bool bFirst = true;
if(bFirst)
{
callee();
bFirst = false;
}
}
我对此的看法是它需要更多代码,并且在函数调用者的每次调用中都需要进行一次检查。
对我来说更好的解决方案如下:(假设被调用者返回 int)
void caller()
{
static int ret = callee();
}
但是如果被调用者返回 void,这无法处理这种情况,我的解决方案是使用逗号表达式:
void caller()
{
static int ret = (callee(), 1);
}
但这样做的问题是,逗号表达式并不常用,人们看到这行代码时可能会感到困惑,从而给维护带来问题。
您有什么好主意来确保函数只被调用一次吗?
你可以用这个:
void caller()
{
static class Once { public: Once(){callee();}} Once_;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)