编译器能否决定函数的noexcept'ness?

时间:2016-08-02 09:37:11

标签: c++ compiler-construction noexcept

我们来做一个例子

 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)

1 个答案:

答案 0 :(得分:6)

如果编译器可以证明某个函数永远不会抛出,那么“As-If”规则(§1.9,“C ++标准的”程序执行“)允许删除处理异常的代码。

然而,无法确定函数是否永远不会抛出 ,因为它等于解决停机问题。