d的异常
原文
用StdioException抛为何不能不抛?
nothrow void hello() {
try {
writeln("Hello, World!")
} catch (StdioException) {}
}
这却可以?
nothrow void hello() {
try {
writeln("Hello, World!")
} catch (Exception) {}
}
d不验证异常,无法验证你调用的函数是否抛,要抓异常来满足不抛.
函数抛异常,则不可能不抛.
函数属性推导.
import std.stdio;
class MyException : Exception {
this(string msg) { super(msg); }
}
void throwing(int x) {
if(x > 2) throw new MyException("Derp!");
else writeln(x);
}
void noThrowing() nothrow {
try {
throwing(10);
}//错误,throwing不是`不抛`函数.
catch(MyException me) {}
}
void main()
{
noThrowing();
}
浙公网安备 33010602011771号