gpt4 book ai didi

c++ - 如果正确使用时它从不抛出,我是否应该声明一个方法 noexcept ?

转载 作者:太空狗 更新时间:2023-10-29 20:03:36 25 4
gpt4 key购买 nike

<分区>

我正在实现一个队列,我想知道,当用户滥用容器时我该怎么办?

例如,我有两个方法,Front 和 Pop,它们从不抛出(我 static_assert 所包含元素的析构函数是 noexcept),只要它们不在空队列上调用。如果在空队列上调用它们,我可以向它们添加一个抛出的检查,但是我无法定义它们 noexcept。

我在想声明这些noexcept是有意义的,然后说在空队列上调用时行为未定义(我提供了Size和Empty方法供用户检查)。然后我可以仅在调试版本上添加检查,因此它会在误用时在调试中调用终止,并在发布时尝试破坏或取消引用缺失的元素。我想知道更好的方法是什么。


在考虑接受的答案后,我决定遵循标准。 Vector 的 pop_back 没有标记为 noexcept 并且与我的 Pop 具有相同的语义,所以我也不会将其标记为 noexcept 。通常,会尽量避免将窄契约(Contract)设置为 noexcept。

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