【问题标题】:noexcept specifying conditions under which function does not thrownoexcept 指定函数不抛出的条件
【发布时间】:2012-06-06 10:03:36
【问题描述】:

我在处理 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),我试图告诉编译器这个函数只有在 idx > 0 时才抛出异常。我这样做对吗?

感谢任何帮助,我希望我解释正确。只是一些简单的解释会很棒。

【问题讨论】:

标签: c++ c++11 noexcept gcc4.7


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 感谢您的帮助。我想你知道我在说什么。你能发布一个合适的例子吗?
  • @bryan sammon:您似乎想要做的事情无法在 C++ 中完成。也就是说,根据函数的运行时参数指定函数是否抛出。
  • 其实这一切对我来说都是新的,只是想学习 noexcept 规范。即使它是编译时间常数。我只是把那个例子放在那里有一个例子。
  • @bryan sammon:noexcept operator 返回 false 如果任何操作可能抛出,它不考虑参数本身的值,而只考虑每个涉及的函数/表达式。带有true 参数的noexcept 规范 表示函数不会抛出。
  • 说得好,这就是我要找的东西,非常感谢
猜你喜欢
  • 2021-11-06
  • 2013-08-22
  • 2016-06-03
  • 2020-04-02
  • 2016-07-07
  • 2020-10-24
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
相关资源
最近更新 更多