Есть ли что-то, что ограничивает будущий стандарт C ++ от введения нескольких возвращаемых значений? - PullRequest
0 голосов
/ 07 октября 2019

В более новых версиях стандарта C ++ нам разрешено писать функции с несколькими возвращаемыми значениями, такими как

std::tuple<int, std::string, float> someFunction0();

Это заставляет нас вызывать функции как

int a;
std::string last_name;
float f_par;
std::tie(a, last_name, f_par) = someFunction0();

Мой вопрос: есть ли что-то, что мешает комитету C ++ вводить «более простую» форму синтаксиса множественных возвращаемых значений? Например,

[int, std::string, float] someFunction1();

, что позволит вам объявить больше встроенных при вызове функции

[int a, std::string last_name, float f_par] = someFunction1();

(возможно, есть синтаксические решения лучше, чем те, что я предоставил.)

С точки зрения компилятора, это не должно быть проблемой, верно?

1 Ответ

3 голосов
/ 07 октября 2019

В вашем примере std::tuple<int, std::string, float> someFunction0(); по-прежнему возвращает один tuple объект, состоящий из нескольких подобъектов.

есть что-то, что мешает комитету C ++ ввести«более простая» форма синтаксиса множественных возвращаемых значений?

Вы можете использовать C ++ 17 объявление структурированной привязки , чтобы распаковать / разложить его:

Случай 2: связывание типа, подобного кортежу

float x{};
char  y{};
int   z{};

std::tuple<float&,char&&,int> tpl(x,std::move(y),z);
const auto& [a,b,c] = tpl;
// a names a structured binding that refers to x; decltype(a) is float&
// b names a structured binding that refers to y; decltype(b) is char&&
// c names a structured binding that refers to the 3rd element of tpl; decltype(c) is co`
...