我在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
为什么会这样?