我想了解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
乘以10
的7th
次方,或者换句话说,10000000
所以d > 1e7
基本上和写一样:d > 10000000.0
下一位称为条件运算符或"三元运算符"。它以CCD_ 9的形式出现。基本上它的意思是"如果a
是true
,那么表达式的结果是b
,否则,表达式的结果就是c
总之,我们可以这样重写您的return
语句:
if(d > 10000000.0) {
throw std::overflow_error("too big");
} else {
return d;
}
注意通常,三元运算符表达式的b
和c
都必须转换为相互类型,但抛出异常是。。。该规则的异常,因为它将控制流转移到处理程序,因此根本不返回任何内容。