c++ - “throw expression code”返回d> 1e7是什么?抛出std::overflow_error(“too big”):d;意思?

标签 c++ c++11

我想学习有关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乘以107th的幂,换句话说就是10000000
因此,d > 1e7与写作基本相同:d > 10000000.0
下一位称为条件运算符"ternary operator"。它以a ? b : c的形式出现。基本上是指“如果atrue,则表达式的结果为b,否则,表达式的结果为c

因此,总而言之,我们可以这样重写您的return语句:
if(d > 10000000.0) {
    throw std::overflow_error("too big");
} else {
    return d;
}

注意通常,三元运算符表达式的bc必须都可以转换为互类型,但是引发异常是该规则的异常(exception)之一,因为它将控制流转移到处理程序,因此完全不返回任何内容。

关于c++ - “throw expression code”返回d> 1e7是什么?抛出std::overflow_error(“too big”):d;意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60402401/

相关文章:

c++ - 如何在 C++ 中检查程序是否安装了 Qt

C++11 线程 : Error passing a vector to a thread function

C++11 友好的图形库

C# 从 C++ DLL 捕获输出

c++ - clang++、boost::spirit 和 c++11

c++ - 如何静态检查可变参数模板参数列表中是否存在类型 T

c++ - 遇到异常时给定函数的返回值是多少?

c++ - 我的程序无法正确计算单词或字符的行数?

c++ - 使用 boost::asio 获取广播源 ip 地址

c++ - 提升asio服务器以了解客户端何时关闭套接字