Что бы я использовал с опциями 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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