Elvis operator

Jovibor
Jovibor

https://en.wikipedia.org/wiki/Elvis_operator

auto ptr = func() ?: otherPtr;

Вместо:

auto ptr = func() ? func() : otherPtr;

//или

auto p = func();
auto ptr = p ? p : otherPtr;
14
рейтинг
2 комментария
Игорь Гусаров

1. Он планируется перегружаемым?

2. Учитывая разрешение объявления переменных в условии if, можно попробовать обобщить эту практику, разрешив объявление переменных в условии оператора ?:.

auto  result = (auto x = foo()) ? x : otherFoo;

auto  ptr = (auto p = strchr(line, '=')) ? p + 1 : "";
Игорь Гусаров
Antervis

дилемма в том, что чаще нужно что-то типа

string* p = foo();
return p ? *p : "null";

что как раз и наводит нас на вопрос о перегружаемости. Для std::optional было бы удобно:

return foo() ?: "abc";
// вместо
auto res = foo(); // optional<string>
return res ? *res : "abc";
Antervis
Обновлено 
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения