gpt4 book ai didi

c++ - array::operator[] 实际上是 noexcept 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:02 25 4
gpt4 key购买 nike

根据 cppref ,当前未指定重载 noexcept。但我认为它们实际上是noexcept,对吧?由于

  1. 不执行边界检查。所以没有像 array::at 这样的 out_of_range 异常.
  2. 如果输入超出范围,就会发生低级段错误或访问冲突,这超出了 C++ 异常范围(我猜)。

最佳答案

operator[] 没有标记为noexcept 的原因是它有一个“窄契约”,即要求索引值在范围内0 ... N-1。如果传递的值不在该范围内,则行为未定义,并且(谁知道?)函数可能会抛出异常。

关于不将具有“狭义契约”的事物标记为 noexcept,该标准非常一致。这被非正式地称为“拉科斯规则”。

请注意,如果图书馆实现者选择,他们可以在标准未指定的地方自由添加 noexcept。我会考虑将其添加到 libc++。

[稍后:事实证明,libc++ 已经为 stringstring_view 做了这个,但不是 vectorarraydeque]

[稍后:libc++ 现在将 operator[] 标记为 noexcept for vector/arraydeque。 ]

关于c++ - array::operator[] 实际上是 noexcept 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55154706/

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