Вроде такого:
int, double, double add (int a) {
return (a+1), (a+2.2), (a+3.3);
}
int a = 8;
int b;
double c, d;
b, c, d = add(a);
А вообще, в чем проявлялась бы неэффективность подобной возможности? Могу представить разве то, что она не так хорошо приспособлена к трансляции в ассемблерный код как функция с единичным возвращаемым значением. Так по конвенции все кладут результат в RAX
да и все, а с множественными значениями придется еще что-то изобретать и ломать ABI.
Ответ:
Список япов:
- go
- lua
- haskell
- rust и проч.
Реализованы - через тульпы/структуры, поэтому в abi ничего не меняется. Но есть и более интересные вариации: так, например, в SBCL первые три возвращаемых значения передаются через регистры (RDX, RDI, RSI), а остальные через стек