Arn*_*aud 4 c++ exception function language-lawyer c++11
我试图找到这个代码是否会引发异常,但没有成功:
std::function<void(void)>f=[]{};
Run Code Online (Sandbox Code Playgroud)
根据标准,std :: function的复制或移动构造函数不是noexcept.但我想缺少noexcept关键字是因为std :: function还包装了用户定义的仿函数对象,其副本或移动构造函数可以抛出.
在我的情况下,异常似乎不太可能,但它有可能吗?
在我的情况下,异常似乎不太可能,但它有可能吗?
原则上,是的.std::function
将不得不分配内存来存储它初始化的可调用对象,如果该内存是动态分配的,那么就有可能失败.
在实践中,在你的情况下,没有.在说明书中的注释中,"鼓励实现避免为小型可调用对象使用动态分配的内存".没有捕获的lambda可以转换为函数指针,它与可调用对象一样小; 所以一个好的实现肯定应该存储没有动态分配.当然,复制指针也不能抛出.
较大的对象(包括具有许多捕获的lambda)将需要动态分配,并且需要复制其捕获的对象或其他状态,因此无法提供无抛出保证.
归档时间: |
|
查看次数: |
1111 次 |
最近记录: |