我想学习有关c++中异常的所有知识,并且发现了这段代码here
发出一些消息,因为我在Linux上的OOM杀手未发出终止。
我只是不明白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
下一位称为条件运算符或"ternary operator"。它以
a ? b : c
的形式出现。基本上是指“如果a
为true
,则表达式的结果为b
,否则,表达式的结果为c
。因此,总而言之,我们可以这样重写您的
return
语句:if(d > 10000000.0) {
throw std::overflow_error("too big");
} else {
return d;
}
注意通常,三元运算符表达式的
b
和c
必须都可以转换为互类型,但是引发异常是该规则的异常(exception)之一,因为它将控制流转移到处理程序,因此完全不返回任何内容。
关于c++ - “throw expression code”返回d> 1e7是什么?抛出std::overflow_error(“too big”):d;意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60402401/