免责声明
我不确定这是否适合此SE,但是无论如何我还是从这里开始。
背景
我早先读过this question,并在one of the answers中查看了此代码段
auto z = [&](){ static auto cache_x = x;
static auto cache_y = y;
static auto cache_result = x + y;
if (x == cache_x && y == cache_y)
return cache_result;
else
{
cache_x = x;
cache_y = y;
cache_result = x + y;
return cache_result;
}
};
我个人倾向于使用一个return语句将其重写如下
auto z = [&](){ static auto cache_x = x;
static auto cache_y = y;
static auto cache_result = x + y;
if (x == cache_x && y == cache_y)
{
}
else
{
cache_x = x;
cache_y = y;
cache_result = x + y;
}
return cache_result;
};
但这会为if
部分留出空白。
我们可以将if/else
改写为if(!(x == cache_x && y == cache_y))
,但这冒着被误解的风险(并且可能变得凌乱)。
我的问题
如果我们应该这样写,那么更容易接受的方式是什么
if
的正文留空if
条件重写为否定版本请注意,我通常使用Java编写代码,而示例代码则使用C ++编写。与特定的C ++构造/方法相对,我对通常被接受的做事方式感兴趣。
答案 0 :(得分:1)
我倾向于使用单个return语句将其重写[…]
这也是我的偏好。通过反转分支的条件,您可以更清楚地到达那里:
auto z = [&](){
static auto cache_x = x;
static auto cache_y = y;
static auto cache_result = x + y;
if (!(x == cache_x && y == cache_y)) {
cache_x = x;
cache_y = y;
cache_result = x + y;
}
return cache_result;
};
通常,如果存在一个分支逻辑为空的分支逻辑(在这种情况下为if ... else ...
),请尝试完全不使用该空分支来重写它。