所以,在相当一些阐述之前,我的问题出现了:
为什么C ++中还没有支持多个返回变量/值?
为了给你一些补充说明:
最近我和lua一起工作过,我开始问自己为什么C ++不允许从函数返回多个值/变量。为了说明,让我给你一个例子:
-- get the first four values of the fibonacci sequence
local function fib4()
return 1, 1, 2, 3
local fib0, fib1, fib2, fib3 = fib4()
能够一次返回多个变量/值是一个非常有用的功能,我通常在C ++世界中通过创建有问题的函数返回的结构(主要是在包装器中收集变量)来模拟。如果一个人使用这种方法很多,那么每个包含一些变量的结构都会混杂在一起。这些结构中没有一个需要是一个实际的对象(并作为一个完整的对象实现)。在某种程度上,概念问题有点类似于使用结构来创建仿函数[而不是lambdas]:
在专业方面,它提高了代码的可读性:
struct point_three_dim_t {
double x;
double y;
double z;
};
point_three_dim_t point = getCollisionPoint();
但是,先验地您不知道代表坐标的成员是否被命名为x
,y
和z
或first
,second
和third
。同样,您必须检查point_three_dim_t
的定义方式。如果
double x, y, z = getCollisionPoint();
是正确的语法。
使用C ++ 11,我们可以使用std::tuple
或std::tie
std::tuple<double,double,double> getCollisionPoint();
// Using std::tie
double x, y, z;
std::tie( x, y, z ) = getCollisionPoint();
// Using std::tuple
std::tuple<double,double,double> point = getCollisionPoint();
这让我们更接近干净和本地代码,但是,我认为这两种语法都不像我在脚本语言中使用的那样具有吸引力。例如lua。