Что бы я использовал с опциями C++ вместо '?' в Javascript. оператор необязательной цепочки? ⇐ C++

Программы на C++. Форум разработчиков
Anonymous
Что бы я использовал с опциями C++ вместо '?' в Javascript. оператор необязательной цепочки?

Сообщение Anonymous »

В Javascript, если у меня есть потенциально нулевой объект obj, который, если не null, будет иметь поле x, я могу написать obj?.x. Это называется необязательной цепочкой или безопасной навигацией: он не будет генерироваться, если obj не является объектом с доступными полями (и не будет генерироваться, если obj является объектом, но не имеет поля x). хотя, возможно, это отдельная функция).
Теперь давайте обратимся к C++, который, начиная с C++17, имеет стандартную библиотеку std::optional. Предположим, у нас есть:

Код: Выделить всё

struct Foo { Bar x; }
и у меня есть дополнительный объект с именем obj. По наивности я мог бы написать выражение:

Код: Выделить всё

obj ? obj->x : optional{}
... но это не сработает, поскольку типы двух результирующих выражений различны, и тринарный оператор их не гармонизирует. Годболт подтверждает этот код:

Код: Выделить всё

#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

Вернуться в «C++»