我们来做一个例子
func segmentLongPress(gestureRecognizer:UILongPressGestureRecognizer)
{
let p = gestureRecognizer.locationInView(self.segmentedControl)
let index = Int(ceil( p.x/(self.segmentedControl.frame.width/4))) - 1
self.segmentedControl.selectedSegmentIndex = index
}
显然,函数class X
{
int value;
public:
X (int def = 0) : value (def) {}
void add (int i)
{
value += i;
}
};
永远不会抛出任何异常。
我的问题是,编译器是否可以分析代码并决定不生成机器代码来处理异常,即使该函数未标记为void X::add (int)
?
答案 0 :(得分:6)
如果编译器可以证明某个函数永远不会抛出,那么“As-If”规则(§1.9,“C ++标准的”程序执行“)允许删除处理异常的代码。
然而,无法确定函数是否永远不会抛出 ,因为它等于解决停机问题。