默认的std :: list <int>构造函数可以抛出吗?

拉尔夫·坦德兹基

我快速浏览了C ++标准和在线C ++参考,但是找不到这个简单问题的答案:

默认构造函数可以std::list<int>抛出吗?

如果是这样,为什么会抛出?

阿恩·默兹(Arne Mertz)

简短的回答:可以,但是可以以相当安全的方式实现:

默认构造函数构造一个空列表,因此几乎不需要在进程中实际分配内存。大多数列表实现不会为空列表分配任何内存。

然而,默认的构造函数是不是真的默认的构造函数,因为它有一个默认的说法:explicit list(const Allocator& = Allocator());
Allocator本身就是一个模板参数,所以调用构造函数已经可以抛出,如果Allocator有足够的哑巴(或复)实施提供一个投掷的默认构造函数,即默认参数的构造是否抛出。

如果的默认构造函数Allocator不抛出,那么提供一个std::list默认构造函数也不会抛出的实现非常容易但是库实现者并不需要这样做。

更新:list具有存储给定分配的副本以便在将来调用它。与我先前的主张相反,对的副本构造函数的调用Allocator可能不会抛出(第17.6.3.5节,请参见注释)。list实现也不允许例如默认构造分配器并在构造器中进行拷贝分配,因为这会破坏任何试图list与不能默认构造的分配器一起使用的代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

默认的默认构造函数可以抛出吗?

来自分类Dev

std :: exception_ptr复制构造函数可以抛出吗?

来自分类Dev

std :: list <std :: unique_ptr>:空的初始化列表与默认构造函数

来自分类Dev

new []如果元素默认构造函数可以抛出?

来自分类Dev

是否保证[[](std :: list <int>&list){返回std :: move(list)}(list)`可以将list保留为空?

来自分类Dev

std :: bind返回的类型可以默认构造吗?

来自分类Dev

不影响性能的默认构造函数可以吗?

来自分类Dev

默认构造函数可以在子类中重载吗?

来自分类Dev

我们真的可以将无参数构造函数称为默认构造函数吗?

来自分类Dev

我们真的可以将无参数构造函数称为默认构造函数吗?

来自分类Dev

可以同时使用默认构造函数和参数构造函数吗?

来自分类Dev

C ++ 11可以构造一个std :: initializer_list吗?

来自分类Dev

我可以将std :: vector <int> *转换为int *吗?

来自分类Dev

我可以将std :: vector <int> *转换为int *吗?

来自分类Dev

构造函数ArrayAdapter <String>(FragmentActivity,int,int,int,List <String>)是未定义的

来自分类Dev

将'std :: initializer_list <int>'转换为'int'

来自分类Dev

C ++不存在合适的构造函数来从“ int”转换为“ std :: pair <int,int>”

来自分类Dev

std :: initializer_list作为std :: array构造函数

来自分类Dev

std :: initializer_list可以专用吗?

来自分类Dev

std :: list是循环的吗?

来自分类Dev

具有std :: string属性的默认移动构造函数行为

来自分类Dev

为什么std :: make_shared需要默认构造函数?

来自分类Dev

插入std :: map <int,std :: vector <int >>的简短函数

来自分类Dev

如果构造函数值为空,我可以给它一个默认值吗?

来自分类Dev

std :: map <struct,int>我需要析构函数吗?

来自分类Dev

List <int>可从IEnumerable分配吗?

来自分类Dev

std :: initializer_list作为构造函数的模板参数

来自分类Dev

如何防止std :: string使用initializer_list构造函数?

来自分类Dev

构造函数中的std :: initializer_list转换

Related 相关文章

  1. 1

    默认的默认构造函数可以抛出吗?

  2. 2

    std :: exception_ptr复制构造函数可以抛出吗?

  3. 3

    std :: list <std :: unique_ptr>:空的初始化列表与默认构造函数

  4. 4

    new []如果元素默认构造函数可以抛出?

  5. 5

    是否保证[[](std :: list <int>&list){返回std :: move(list)}(list)`可以将list保留为空?

  6. 6

    std :: bind返回的类型可以默认构造吗?

  7. 7

    不影响性能的默认构造函数可以吗?

  8. 8

    默认构造函数可以在子类中重载吗?

  9. 9

    我们真的可以将无参数构造函数称为默认构造函数吗?

  10. 10

    我们真的可以将无参数构造函数称为默认构造函数吗?

  11. 11

    可以同时使用默认构造函数和参数构造函数吗?

  12. 12

    C ++ 11可以构造一个std :: initializer_list吗?

  13. 13

    我可以将std :: vector <int> *转换为int *吗?

  14. 14

    我可以将std :: vector <int> *转换为int *吗?

  15. 15

    构造函数ArrayAdapter <String>(FragmentActivity,int,int,int,List <String>)是未定义的

  16. 16

    将'std :: initializer_list <int>'转换为'int'

  17. 17

    C ++不存在合适的构造函数来从“ int”转换为“ std :: pair <int,int>”

  18. 18

    std :: initializer_list作为std :: array构造函数

  19. 19

    std :: initializer_list可以专用吗?

  20. 20

    std :: list是循环的吗?

  21. 21

    具有std :: string属性的默认移动构造函数行为

  22. 22

    为什么std :: make_shared需要默认构造函数?

  23. 23

    插入std :: map <int,std :: vector <int >>的简短函数

  24. 24

    如果构造函数值为空,我可以给它一个默认值吗?

  25. 25

    std :: map <struct,int>我需要析构函数吗?

  26. 26

    List <int>可从IEnumerable分配吗?

  27. 27

    std :: initializer_list作为构造函数的模板参数

  28. 28

    如何防止std :: string使用initializer_list构造函数?

  29. 29

    构造函数中的std :: initializer_list转换

热门标签

归档