【发布时间】:2021-01-30 10:08:42
【问题描述】:
如果我们考虑函数
int sum(int* nums, size_t len)
{
int sum = 0;
for(int i = 0; i < len; i++) sum += nums[i];
return sum;
}
我们可以使用这样的左值来调用它
int[] nums = {1,2,3};
sum(nums, 3);
但是当尝试使用右值时它不起作用。
sum({1,2,3}, 3);
有没有办法让它工作?
【问题讨论】:
-
您在 void 函数中有一个 return 语句。删除返回或使 sum 函数的返回类型为
int -
你是完全正确的,对不起,我没有太关注这个例子,因为那不是重点,但会修复它 rn
-
无论如何它都不起作用,因为您的
sum函数返回void。但是你可以使用compound literals:sum((int[]){1,2,3}, 3);。您甚至可以将sum包装在一个自动确定数组长度的宏中。或者你可以写1 + 2 + 3。 (我认为您想要的不是 C 中的常见用例。) -
当然这是一个最小的例子,我实际上想处理一个字符**
-
很公平。我可以想象像
key_in(str, {"red", "green", "blue", NULL})这样的东西。
标签: arrays c implicit-conversion rvalue