В Javascript, если у меня есть потенциально нулевой объект obj, который, если не null, будет иметь поле x, я могу написать obj?.x. Это называется необязательной цепочкой или безопасной навигацией: он не будет генерироваться, если obj не является объектом с доступными полями (и не будет генерироваться, если obj является объектом, но не имеет поля x). хотя, возможно, это отдельная функция).
Теперь давайте обратимся к C++, который, начиная с C++17, имеет стандартную библиотеку std::optional. Предположим, у нас есть:
и у меня есть дополнительный объект с именем obj. По наивности я мог бы написать выражение:
... но это не сработает, поскольку типы двух результирующих выражений различны, и тринарный оператор их не гармонизирует. Годболт подтверждает этот код:
Код: Выделить всё
#include
using Bar = int;
struct Foo { Bar x; };
std::optional f()
{
std::optional obj {};
return obj ? obj->x : std::nullopt;
}
Итак, какая короткая идиома существует для выражения obj?.x в C++?
Примечание. Подойдет любая стандартная версия языка, но, очевидно, чем старше, тем лучше.
Подробнее здесь:
https://stackoverflow.com/questions/791 ... nal-chaini