"throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?



我想了解c++中的所有异常,我在这里找到了这段代码发布一些,因为我在Linux上的OOM杀手没有发布terminate。我只是不明白return d > 1e7 ? throw std::overflow_error("too big") : d;在做什么:

#include <iostream>
#include <stdexcept>
double f(double d)
{
return d > 1e7 ? throw std::overflow_error("too big") : d; //what is going on here?
}
int main()
{
try {
std::cout << f(1e10) << 'n';
} catch (const std::overflow_error& e) {
std::cout << e.what() << 'n'; // information from length_error printed
}
return 0;
}

好的,让我们一步一步来看看:

我想你的困惑来自两个地方之一:

d > 1e7

或者,语法为:

a ? b : c;

因此,对于初学者来说,1e7是一种科学记数法,基本上是1乘以107th次方,或者换句话说,10000000

所以d > 1e7基本上和写一样:d > 10000000.0

下一位称为条件运算符或"三元运算符"。它以CCD_ 9的形式出现。基本上它的意思是"如果atrue,那么表达式的结果是b,否则,表达式的结果就是c

总之,我们可以这样重写您的return语句:

if(d > 10000000.0) {
throw std::overflow_error("too big");
} else {
return d;
}

注意通常,三元运算符表达式的bc都必须转换为相互类型,但抛出异常是。。。该规则的异常,因为它将控制流转移到处理程序,因此根本不返回任何内容。

相关内容

最新更新