Open Neargye opened 3 years ago
Игорь Гусаров 30 января 2020, 14:22
Он планируется перегружаемым?
Учитывая разрешение объявления переменных в условии if, можно попробовать обобщить эту практику, разрешив объявление переменных в условии оператора ?:.
auto result = (auto x = foo()) ? x : otherFoo;
auto ptr = (auto p = strchr(line, '=')) ? p + 1 : "";
Antervis 11 февраля 2020, 19:01 дилемма в том, что чаще нужно что-то типа
string p = foo(); return p ? p : "null"; что как раз и наводит нас на вопрос о перегружаемости. Для std::optional было бы удобно:
return foo() ?: "abc";
// вместо
auto res = foo(); // optional
Андрей Попандопуло 18 июня 2020, 14:28 Предлагаемый синтаксис скорее заставит и компилятор и интеллисенс задуматься о том, что на лицо явная синтакическая ошибка. Предложение Игря Гусарова выглядит в этом случае предпочтительнее. На мой взгляд, лучше, чтобы такой оператор вообще был похож на if с инициализацией. Например:
auto result = (auto &&val {calc()}; val < 0) ? 0 : val; В отличии оригинального предложения, где сравнение (в С# или Javascript) происходит с null, сдесь можно производить любое сравнение без многократного вызова кода, создающего сравниваемое значение. Естественно, scope этой переменной сам оператор. Голосую "за" саму идею, но предлагаемый синтаксис, как по мне, - не очень.
Jovibor 19 июня 2020, 3:22 Андрей Попандопуло,
Можно и так. Правда это более громоздко.
Основная-же идея здесь это однострочность, и лишь однократный вызов предикатной ф-ии.
Перенос предложения: голоса +34, -5 Автор идеи: Jovibor
https://en.wikipedia.org/wiki/Elvis_operator
Вместо: