CUDA:我可以安全地假设编译器在 && 表达式中为 false 后停止吗
CUDA: Can I safely assume compiler stops after false in an && expression
问题:我可以安全地假设 CUDA 编译器在 &&
表达式中的第一个 false
之后停止求值吗?
if ( condition1 && foo() )
{
// do something
}
如果 condition1
是 false
那么 foo()
必须 而不是 被调用 [会导致未定义的行为]
或者我应该像这样编码更好:
if ( condition1 )
{
if ( foo() )
{
// do something
}
}
运算符&&
从左侧开始计算操作数。如果最左边的操作数是 false
,则不能继续求值。如果为真,将继续计算正确的操作数 ans 等等。
在您的情况下,foo()
不会在 condition1 == false
时被调用,因为这是计算终止的地方。所以我会选择第一个代码片段。
问题:我可以安全地假设 CUDA 编译器在 &&
表达式中的第一个 false
之后停止求值吗?
if ( condition1 && foo() )
{
// do something
}
如果 condition1
是 false
那么 foo()
必须 而不是 被调用 [会导致未定义的行为]
或者我应该像这样编码更好:
if ( condition1 )
{
if ( foo() )
{
// do something
}
}
运算符&&
从左侧开始计算操作数。如果最左边的操作数是 false
,则不能继续求值。如果为真,将继续计算正确的操作数 ans 等等。
在您的情况下,foo()
不会在 condition1 == false
时被调用,因为这是计算终止的地方。所以我会选择第一个代码片段。