gpt4 book ai didi

c++ - noexcept 指定函数不抛出的条件

转载 作者:行者123 更新时间:2023-11-27 23:23:42 29 4
gpt4 key购买 nike

我在思考 noexcept 时遇到了一些麻烦。

template <int SIZE>
int pop(int idx) noexcept(noexcept(SIZE > 0)) // this is what I dont understand
{
if (idx <= 0)
throw std::out_of_range("My array doesnt go that high");
return idx;
}

这只是一个简单的函数,但是你看它怎么只在idx <= 0时抛出异常,我不明白。所以在我的规范中,noexcept(idx > 0),我试图告诉编译器这个函数只在 idx > 0 时不抛出异常。我这样做对吗?

感谢任何帮助,我希望我的解释是正确的。只需一些简单的解释就可以了。

最佳答案

实际上,noexept 规范 需要一个常量表达式,而不是运行时表达式。您已将 noexcept specificationnoexcept operator 一起使用。 noexcept(idx >0) 返回 true,因为比较两个整数不会抛出异常,并且您正在使用 true 作为 的参数>noexcept 规范 告诉编译器您的函数永远不会抛出异常。声明

int pop(int idx) noexcept(noexcept(idx > 0))

表示只要 idx > 0 不抛出此函数就不会抛出,总是 int 的情况。

更新:现在您已经更改了问题中的代码,因此 idx 是一个非类型模板参数,但是相同推理适用。比较 int从不抛出

您似乎想做的事情在 C++ 中无法完成。也就是说,根据函数的运行时参数指定函数是否抛出。

关于c++ - noexcept 指定函数不抛出的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10907271/

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