有没有从C++函数返回多个值的首选方法?例如,假设一个函数分割两个整数并返回商和余数.我经常看到的一种方法是使用参考参数:
void divide(int dividend, int divisor, int& quotient, int& remainder);
Run Code Online (Sandbox Code Playgroud)
一种变化是返回一个值并通过引用参数传递另一个值:
int divide(int dividend, int divisor, int& remainder);
Run Code Online (Sandbox Code Playgroud)
另一种方法是声明一个包含所有结果的结构并返回:
struct divide_result {
int quotient;
int remainder;
};
divide_result divide(int dividend, int divisor);
Run Code Online (Sandbox Code Playgroud)
这些方式中的一种通常是首选,还是有其他建议?
编辑:在现实世界的代码中,可能会有两个以上的结果.它们也可以是不同类型的.
在大多数主流编程语言中,从函数返回多个值似乎是一件非常尴尬的事情.
典型的解决方案是使任一个结构或一个普通的旧数据类和返回,或者通过引用传递至少一些参数或代替指针返回它们的.
使用引用/指针非常尴尬,因为它依赖于副作用,意味着你还有另一个参数要传递.
类/结构解决方案也是恕我直言,因为你最终得到了一百万个小类/结构,它们只用于从函数返回值,产生不必要的混乱和冗长.
此外,很多时候总是需要一个返回值,其余的只在某些情况下由调用者使用.这些解决方案都不允许调用者忽略不需要的返回类型.
我知道的一种优雅处理多个返回值的语言是Python.对于那些不熟悉的人,它使用元组解包:
a, b = foo(c) # a and b are regular variables.
myTuple = foo(c) # myTuple is a tuple of (a, b)
Run Code Online (Sandbox Code Playgroud)
有没有人对这个问题有任何其他好的解决方案?除了Python之外,现有主流语言中的两种习语以及您在非主流语言中看到的语言级解决方案都是受欢迎的.
python language-agnostic language-design function syntactic-sugar
重要提示:请参阅这个非常相关的问题:在C++中返回多个值.
我是如何在ANSI C中做同样的事情的?你会使用一个结构或传递函数中的参数的地址吗?我追求极其高效(快速)的代码(时间和空间),即使以可读性为代价.
编辑:谢谢你的所有答案.好吧,我想我有一些解释:我正在写这本书,关于特定领域的某个算法子集.我已经为自己设定了一个非常随意的目标,即以可读性和其他方式为代价,为我的所有算法提供最有效(时间和空间)的实现.这部分是我(一般)问题的本质.
答:我希望我能做到这一点,从(可能)最快到更常见的感觉(所有这些都是先验的,即没有测试):
这有意义吗?如果是这样的话,我认为Jason的回答是最接近的,即使他们都提供了一些"谜题".罗伯特很好,但此时的语义并不是我所追求的(尽管他的建议得到了适当的注意)
谢谢你们.
我只是想知道是否有办法让Java方法返回多个值.
我正在创建一个使用jdbc库来处理数据库的应用程序.我可以成功地将值输入到数据库中,但我需要一种方法来返回它们,这就是我有点卡住的地方.我创建一个表单,用户输入一个特定的值(一个ID号),然后由执行我的数据库工作的Database类传递给该表.
Database newQuery = new Database();
newQuery.getCust(c_ID); //uses the GetCust method in my class,
//passing it the ID of the customer.
Run Code Online (Sandbox Code Playgroud)
我的Database类中的getCust()方法创建以下查询:
ResultSet Customer = stat.executeQuery("SELECT * FROM Persons WHERE Cust_ID=C_ID");
Run Code Online (Sandbox Code Playgroud)
我需要一种方法来返回存储在Customer中的结果.有任何想法吗?