Что означает этот синтаксис if? C++
Читал про std::oprional и наткнулся на такой кусок кода:
if (auto ostr = maybe_create_hello(); ostr) // Это кто? (Who?) :/
std::cout << "ostr " << *ostr << '\n';
else
std::cout << "ostr is null\n";
Не могу понять что происходит в условии if. Первая часть с auto понятна - прямо в if инициализируется переменная ostr значением функции. Но после ; ostr - что это? И как if проверяет данное выражение?
Ответы (1 шт):
if (auto ostr = maybe_create_hello(); ostr)
Вышеприведенный фрагмент кода эквивалентен следующему
{
auto ostr = maybe_create_hello();
if (ostr) {
// ...
}
}
Сперва он объявляет переменную ostr, инициализируя ее значением, возвращенным функцией maybe_create_hello (являющимся, как я понимаю, std::optional<std::string> или std::optional<const char*>).
А далее, так как результат выражения, переданного в качестве условия оператора if должен приводиться к bool, пытается привести ostr к bool, что успешно осуществляется, так как для std::optional перегружено приведение к bool, возвращающее true, если объект содержит значение, и false, если не содержит.
Документация к классу std::optional: cppreference.com
Документация к оператору if: cppreference.com