ОК, давайте посмотрим на это шаг за шагом:
Я полагаю, что ваше замешательство происходит из одного из двух мест:
d > 1e7
или синтаксис:
a ? b : c;
Итак, для начала, 1e7
является формой научной c нотации, в основном 1
раз 10
в 7th
степени, или другими словами 10000000
Так d > 1e7
в основном совпадает с записью: d > 10000000.0
Следующий бит называется условным оператором или «троичным оператором» . это приходит в форме a ? b : c
. В основном это означает, что «если a
равно true
, то результатом выражения будет b
, в противном случае, результатом выражения будет c
.
Итак, в итоге, мы можем переписать ваш оператор return
следующим образом:
if(d > 10000000.0) {
throw std::overflow_error("too big");
} else {
return d;
}
NOTE Как правило, выражения b
и c
троичного оператора должны быть преобразованы во взаимный тип, но создание исключения является одним из ... исключений этого правила, поскольку оно перенаправляет поток управления на обработчик и, таким образом, вообще ничего не возвращает.