C++ C+中的多个返回值+;
因此,在进行大量阐述之前,我的问题来了: <>强>为什么C++中没有多个返回变量/值的支持(?)?<强> < /p> 给你更多的提示:C++ C+中的多个返回值+;,c++,c++11,C++,C++11,因此,在进行大量阐述之前,我的问题来了: 强>为什么C++中没有多个返回变量/值的支持(?)? < /p> 给你更多的提示: 什么(如果有的话)是概念上的一个多重返回值和C++ +< /LI>的问题? 编译器实现从函数中返回值的方式是否会导致多个返回值不可能/效率低下 最近我和Lua一起工作了很多次,我来问自己为什么C++不允许从函数返回多个值/变量。为了说明这一点,让我举一个lua示例: -- get the first four values of the fibonacci sequ
- 编译器实现从函数中返回值的方式是否会导致多个返回值不可能/效率低下
最近我和Lua一起工作了很多次,我来问自己为什么C++不允许从函数返回多个值/变量。为了说明这一点,让我举一个lua示例:
-- 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\u thin\u dim\t{
双x;
双y;
双z;
};
point_three_dim_t point=getCollisionPoint();
但是,您事先不知道表示坐标的成员是否命名为x
、y
和z
或first
、second
和third
。因此,您必须再次检查point\u three\u dim\t
是如何定义的。如果
double x,y,z=getCollisionPoint();
语法正确
使用C++11,我们可以通过使用std::tuple
或std::tie
std::tuple getCollisionPoint();
//使用std::tie
双x,y,z;
std::tie(x,y,z)=getCollisionPoint();
//使用std::tuple
std::tuple point=getCollisionPoint();
这使我们更接近于干净的本地代码,然而,我认为这两种语法都不如我在lua这样的脚本语言中使用的语法那么吸引人。使用
::std::tuple
,::std::pair
或struct
@user1095108你没有读过他的问题吗?他做了所有这些事情,他问自己为什么要做这些事情,而且没有内置的多种类型的返回。至于最初的问题,我很少发现我需要返回多个东西,并在需要很多东西时使用向量(如fib示例)。如果返回类型不同,我通常已经设置了一个结构,所以它一点也不混乱mean ifmyfunc()
函数返回多个返回值?这会产生多个变量吗?我的看法是C++不允许这样做,因为你不应该为你不使用的东西付费。