CUDA:我可以安全地假设编译器在&&和表达

时间:2015-11-15 13:06:35

标签: cuda boolean-expression

问题:我能否安全地假设CUDA编译器在public class ReferenceToStaticMethod { public static void main(String[] args) { // TODO code application logic here List numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10,11,12,13,15,16); List primeNumbers = ReferenceToStaticMethod.findPrimeNumbers(numbers, ReferenceToStaticMethod::isPrime); System.out.println("Prime Numbers are "+primeNumbers); } public static boolean isPrime(int number) { if(number == 1 ){ return false; } for (int i = 2; i < number; i++) { if (number % i == 0) { return false; } } return true; } public static List findPrimeNumbers(List list, Predicate predicate) { List sortedNumbers = new ArrayList(); list.stream().filter((i) ->(predicate.test(i))).forEach((i) -> { sortedNumbers.add(i); }); return sortedNumbers; } } 表达式中的第一个ReferenceToStaticMethod.java:15: error: incompatible types: invalid method reference List primeNumbers = ReferenceToStaticMethod.findPrimeNumbers(numbers, ReferenceToStaticMethod::isPrime); ^ incompatible types: Object cannot be converted to int Note: ReferenceToStaticMethod.java uses unchecked or unsafe operations. 之后停止评估?

false

如果&&if ( condition1 && foo() ) { // do something } ,那么condition1必须 [会导致未定义的行为]

或者我应该更好地编码:

false

1 个答案:

答案 0 :(得分:1)

运算符false从左侧开始计算操作数。如果最左边的操作数是foo(),则它不能继续评估。如果这是真的,评估将继续到正确的操作数等等。

在您的情况下,condition1 == false在{{1}}时不会被调用,因为这是评估将终止的地方。所以我会使用第一个代码片段。