gpt4 book ai didi

c++ - 我可以避免超过 3 个级别的缩进吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:35 25 4
gpt4 key购买 nike

在工作中,我最近为一个根据已发布规范实现的类编写了一个小于运算符,该类具有许多属性,其中六个属性用于唯一标识该类的一个实例。 (为了这个问题,我们将这些属性称为 a-f。)此外,这六个属性属于六种不同类型。我这样定义运算符:

bool operator<(const Class& lhs, const Class& rhs)
{
bool retval = (&lhs != &rhs);
if (retval == true)
{
if (lhs.a == rhs.a)
{
if (lhs.b == rhs.b)
{
if (lhs.c == rhs.c)
{
if (lhs.d == rhs.d)
{
if (lhs.e == rhs.e)
{
retval = (lhs.f < rhs.f);
} else {
retval = (lhs.e < rhs.e);
}
} else {
retval = (lhs.d < rhs.d);
}
} else {
retval = (lhs.c < rhs.c);
}
} else {
retval = (lhs.b < rhs.b);
}
} else {
retval = (lhs.a < rhs.a);
}
}
return retval;
}

这当然打破了 Linux 内核的编码理念,“如果你需要超过 3 层的缩进,你就完蛋了,应该修复你的程序。”所以我的问题是,是否有更好的方法来定义此运算符,使其没有那么多级别的缩进?

最佳答案

你可以这样写这种字典序比较:

if (lhs.a != rhs.a) return lhs.a < rhs.a;
if (lhs.b != rhs.b) return lhs.b < rhs.b;
if (lhs.c != rhs.c) return lhs.c < rhs.c;
if (lhs.d != rhs.d) return lhs.d < rhs.d;
if (lhs.e != rhs.e) return lhs.e < rhs.e;
return lhs.f < rhs.f;

您可以像这样用一次返回重写它:

bool result;
if (lhs.a != rhs.a) result = lhs.a < rhs.a;
else if (lhs.b != rhs.b) result = lhs.b < rhs.b;
else if (lhs.c != rhs.c) result = lhs.c < rhs.c;
else if (lhs.d != rhs.d) result = lhs.d < rhs.d;
else if (lhs.e != rhs.e) result = lhs.e < rhs.e;
else result = lhs.f < rhs.f;
return result;

关于c++ - 我可以避免超过 3 个级别的缩进吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31634366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com