gpt4 book ai didi

c++ - std::vector 默认构造函数可以抛出异常吗

转载 作者:可可西里 更新时间:2023-11-01 18:19:46 28 4
gpt4 key购买 nike

如果我使用默认构造函数(和默认分配器)构造一个空的 std::vector,它会抛出异常吗?

一般来说,为容器的元素分配空间会抛出异常(即 std::bad_alloc)。但是 std::vector 的默认构造函数并不需要分配任何这样的空间;它可以在第一次插入或赋值时懒惰地分配一些空间。但是 C++ 标准是否要求它不抛出异常(暗示惰性分配,或者捕获 std::bad_alloc 然后回退到惰性分配)?

最佳答案

这取决于Allocator 的默认构造函数。 std::vector 的默认构造函数声明为

vector() noexcept(noexcept(Allocator())); (since C++17)

如果std::allocator使用则为noexcept(true);即不会抛出异常。

allocator() noexcept; (since C++11)

因此,在 C++17 之前,或者如果使用非默认分配器,则可能会抛出异常。

关于c++ - std::vector 默认构造函数可以抛出异常吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50367125/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com