CUDA:我可以安全地假设编译器在 && 表达式中为 false 后停止吗

CUDA: Can I safely assume compiler stops after false in an && expression

问题:我可以安全地假设 CUDA 编译器在 && 表达式中的第一个 false 之后停止求值吗?

if ( condition1 && foo() )
{
    // do something
}

如果 condition1false 那么 foo() 必须 而不是 被调用 [会导致未定义的行为]

或者我应该像这样编码更好:

if ( condition1 )
{
    if ( foo() )
    {
        // do something
    }
}

运算符&& 从左侧开始计算操作数。如果最左边的操作数是 false,则不能继续求值。如果为真,将继续计算正确的操作数 ans 等等。

在您的情况下,foo() 不会在 condition1 == false 时被调用,因为这是计算终止的地方。所以我会选择第一个代码片段。