说我从函数{1,2}
获得f(a,b)
(无论f
是什么/不重要),我想将其存储到int s[2]
中。我该怎么办?似乎我不能只做int s[2] = f(a,b)
,我无法将f
的输出分开,因为没有变量可以从中获取值。 f(a,b)[0]
不起作用。
答案 0 :(得分:3)
这完全取决于f
返回的确切内容。你不能简单地return {1, 2};
,所以它必须返回别的东西。它是一个指向数组的衰变指针吗? std::vector
?
如果是指针,则返回指针,然后分配值。
int* p = f(a, b);
s[0] = p[0];
s[1] = p[1];
如果s
大于两个元素,那么最好使用std::copy
中的<algorithm>
:
int* p = f(a, b);
std::copy(p, p + 2, s); // where 2 is the size of the array.
答案 1 :(得分:2)
改为使用std::array
数组包装器:
std::array<int, 2> f(int, int);
std::array<int, 2> result = f(1, 2);
答案 2 :(得分:2)
要从函数返回两件事,我更喜欢std::pair
:
#include <utility>
std::pair<int, int> f()
{
return std::make_pair(1, 2);
}
int main()
{
std::pair<int, int> p = f();
int s[2] = {p.first, p.second};
}
如果数组已存在,您可以通过boost::tie
boost::tie(s[0], s[1]) = f();
答案 3 :(得分:1)
你可以复制它,如 memcpy(dest,f(1,2),size) 。
或者您可以返回 结构 。将数组包装在 struct 中以便通过 operator =()轻松复制它是一个老技巧。 E.g:
struct Foo { int a, b };
Foo f(int, int);
int main()
{
Foo myF = f(1,2);
}
struct 包装随后会变得有用,当您的代码发展并且您决定返回第三个值时。作为 struct 意味着您可以使其成为向后兼容的更改,并避免更改其他代码......