0

对你们中的一些人来说答案可能很明显,但由于我找不到答案,我需要问它。通常,如果一个函数必须返回是否所有执行都没有问题,我会使用一个布尔值来跟踪任何失败。

bool myFunction()
{
    bool ok = true;
    if (...) {
        if (...) {
            ok = ...;
        }
        ok = ok && (...);
    }
    ok = ok && (...);
    return ok;
}

由于不&&=存在,我经常使用这种语法:(ok = ok && (...)可以(...)是条件或值)。但我觉得这很不雅。是否有任何符合 C++ 标准的方法可以更简洁优雅地编写它?

4

6 回答 6

2

早点返回,因为如果ok变为:则不会执行其他代码false

bool myFunction()
{
    bool ok = true;
    if (...) {
        if (...) {
            if (!...) return false;
        }
        if (!...) return false;
    }

    return (...);
}

这是异常优于错误代码的另一个原因:如果你不处理它们,你就不会为正常代码路径的代码做意大利面。

于 2012-10-10T05:57:29.417 回答
2

您可以只使用&=布尔标志:

bool myFunction()
{
    bool ok = true;
    if (...) {
        if (...) {
            ok &= ...;
        }
        ok &= ...;
    }
    ok &= ...;
    return ok;
}
于 2012-10-10T06:01:57.890 回答
1

您可以使用&=相等的运算符,因为 bool 是 1 位类型并且所有算术运算符都有效。

于 2012-10-10T06:01:57.700 回答
1

尝试使用:

&=

而不是 &&=

于 2012-10-10T06:02:09.260 回答
0

最标准的方法是在不满足条件时返回 false,否则在方法结束时返回 true。所以实际上你甚至不需要那个布尔变量。
就这样使用它:

bool myFunction()
{
    if (...) {

    } else return false;

    return true;
}

如果您坚持使用布尔值,请使用 &= 运算符。

于 2012-10-10T06:36:48.270 回答
0

或者,您可以选择不使用返回值。

传入一个对象或函数指针以用于成功或失败。

例如有一个对象:

void onConditionOtherwise(BooleanAction& action)
{
    if (...) && (...) {
        action.success();
    } else {
        action.failure();
    }
}
于 2012-10-10T07:07:17.210 回答