Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中的多个返回值+;_C++_C++11 - Fatal编程技术网

C++ C+中的多个返回值+;

C++ C+中的多个返回值+;,c++,c++11,C++,C++11,因此,在进行大量阐述之前,我的问题来了: 强>为什么C++中没有多个返回变量/值的支持(?)? < /p> 给你更多的提示: 什么(如果有的话)是概念上的一个多重返回值和C++ +< /LI>的问题? 编译器实现从函数中返回值的方式是否会导致多个返回值不可能/效率低下 最近我和Lua一起工作了很多次,我来问自己为什么C++不允许从函数返回多个值/变量。为了说明这一点,让我举一个lua示例: -- get the first four values of the fibonacci sequ

因此,在进行大量阐述之前,我的问题来了:

<>强>为什么C++中没有多个返回变量/值的支持(?)?<强> < /p> 给你更多的提示:

    什么(如果有的话)是概念上的一个多重返回值和C++ +< /LI>的问题?
  • 编译器实现从函数中返回值的方式是否会导致多个返回值不可能/效率低下

最近我和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 if
myfunc()
函数返回多个返回值?这会产生多个变量吗?我的看法是C++不允许这样做,因为你不应该为你不使用的东西付费。