[错误]在C++中获取临时数组的地址?

Sag*_*gar 0 c++

我在java中有一个函数

static int a2(int[] a)
{
int sumEven = 0;
int sumOdd = 0;

for (int i=0; i<a.length; i++)
{
  if (a[i]%2 == 0)
    sumEven += a[i];
  else
    sumOdd += a[i];
}

return sumOdd - sumEven;
}
Run Code Online (Sandbox Code Playgroud)

我在java中用main调用它

public static void main()
{
a2(new int[] {1});
a2(new int[] {1, 2});
a2(new int[] {1, 2, 3});
a2(new int[] {1, 2, 3, 4});
a2(new int[] {3, 3, 4, 4});
a2(new int[] {3, 2, 3, 4});
a2(new int[] {4, 1, 2, 3});
a2(new int[] {1, 1});
a2(new int[] {});
}
Run Code Online (Sandbox Code Playgroud)

其中a2是函数,参数是数组.我想用c ++实现同样的东西,但是我无法将数组传递给函数,就像我传入java一样.以临时数组的地址给出错误[错误].

在c ++中,我就是这样做的

f((int[4]) {1,2,3,4});
Run Code Online (Sandbox Code Playgroud)

给出错误=> [错误]获取临时数组的地址.

怎么做到这一点?

Sla*_*ica 6

使用std::vector而不是处理低级数组:

int a2( const std::vector<int> &v )
{
    return std::accumulate( v.begin(), v.end(), 0, []( int a, int b ) {
        return a + ( b % 2 ? b : -b );
    } );
}

int main()
{
    a2( { 1, 2, 3 } );
}
Run Code Online (Sandbox Code Playgroud)

实例