您好,我发现了一个与断言相关的问题。它询问哪些行适本地使用了断言语句。
23. int =5;
24.
25. public void stuff1(int x){
26. assert(x>0);
27. switch(x){
28. case 2:x=3;
29. default:assert false;
}
}
30.
31. private void stuff2(int y){
assert(y<0);
}
32.
33. private void stuff3(){
assert(stuff4());
}
34.
35. private boolean stuff4(){
z=6;
return false;
}
正确答案是“第 29 行和第 31 行的断言语句被正确使用”。
但我觉得第 29 行中使用断言没有用,因为它总是给出断言错误。如果 x 仍为 2,则将运行默认值并给出断言错误。为什么答案说它已经正确使用了第 29 行中的断言。请有人解释一下。
而且我觉得第 33 行中的断言不会被占用,因为 stuff4() 方法调用将始终返回 false,并且断言将始终为 false。正确吗?
最佳答案
断言(假)没问题。这是评论的机器可读版本
// should never be reached
我始终将断言视为机器可读(且可执行)的注释
assert(stuff4()) 是不同的。看起来是在测试stuff4的返回值。这很糟糕,因为在非调试版本中 stuff4 不会被调用(对于大多数断言实现);通常,断言宏在非调试版本中编译为空
关于assertions - 使用断言的适当性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25152799/