根据/ EHsc,为什么Visual C ++在析构函数的noexcept上有所不同?

时间:2016-01-25 10:13:44

标签: c++ visual-c++ noexcept

我在cppreference.com中看到了以下句子。

  

默认情况下,任何用户定义的析构函数都是public CarAdapter(Context context, int resource, ArrayList<Car> carArrayList, ArrayList<Boolean> mlist) { super(context, resource, carArrayList); this.booleans= mlist ; } ,除非声明另有说明,否则任何基类或成员的析构函数都是noexcept(true)

要知道Visual C ++ 2015是否确认了这一点,我尝试了以下示例。

noexcept(false)

结果:

#include <iostream>

class Test1 { public: ~Test1() = default; };
class Test2 { public: ~Test2() { } };
class Test3 { public: Test3() { } ~Test3() { } };

int main()
{
    std::cout << std::boolalpha;
    std::cout << "Test1: " << noexcept(Test1().~Test1()) << std::endl;
    std::cout << "Test2: " << noexcept(Test2().~Test2()) << std::endl;
    std::cout << "Test3: " << noexcept(Test3().~Test3()) << std::endl;
}

但是,当我打开启用例外的C:\Users\***>cl test.cpp .... /out:test.exe test.obj C:\Users\***>test Test1: true Test2: false Test3: false 开关时,结果会发生变化。

/EHsc

为什么会这样?

0 个答案:

没有答案