delay_s(1000)
检查用户名的长度,当length大于或等于5时返回checkUsername()
。否则返回true
。
函数false
应该在checkUsername()
上返回false,但似乎没有BadLengthException()
和checkUsername()
中的任何代码返回BadLengthException::what()
。但是当遇到长度小于5的用户名时,该程序仍能正常工作。这里发生了什么?返回值如何通过false
?
false
答案 0 :(得分:1)
当checkUsername()
中抛出异常时,它会停止该函数中的处理并返回到main()
的调用函数。由于调用是在try
块中进行的,因此异常由catch
块处理。
完全忽略if()
语句,catch
不关心该函数中发生的事情,只打印“Too short:”
答案 1 :(得分:1)
函数可以返回值或抛出异常,它不能同时执行这两个操作,它们是互斥的。如果它成功返回一个值,表示代码没有抛出异常,并且抛出异常,则表示它没有使它返回值。
此外,捕获返回值也会中断,代码会直接跳转到您定义的catch
块。如果你忽略了自动对象破坏和goto
类型实现之类的事情,这就像是一个很难finally
的概念,它会在异常冒泡的过程中发生。