Ale*_* C. 16 c++ exception c++11
只是一个简单的问题,我找不到一个好的参考,特别是关于未来C++ 0x标准的当前实现.
由于移动构造函数可以抛出,这意味着某些标准库函数无法提供强大的异常保证(例如vector<T>::resize()).
有一个建议1)使所有标准库移动构造函数"不抛出",2)在用户代码上添加编译时检查以确保例如.std::pair<std::string, MyType>定义一个nothrow移动构造函数或根本没有移动构造函数.
这个提案怎么了(特别是关于这个问题)?问题如何在最终草案中"解决"?
最重要的是,当我使用最近的GCC或MSVC 10时,它对我意味着什么?标准库的那些实现是否提供了例如的强例外保证.std::vector<MyTypeWithAThrowingMoveConstructor>::resize()?
编辑:我没有看到这个明显相关的问题.如果对我的问题是重复的事实达成共识,那就关闭它.但是,我对实施的内容非常感兴趣,而不是讨论的内容.
我没有检查具体的实现,但是一般的想法是,如果move构造函数可以抛出,向量将不得不复制元素。这样就可以在出现异常的情况下回滚。
甚至move_if_noexcept定义了一个辅助函数<utility>来帮助它决定要做什么。
| 归档时间: |
|
| 查看次数: |
1385 次 |
| 最近记录: |