调用接口时初始化数组无法更改

时间:2014-09-21 16:39:54

标签: c++ c++11

我有一个接口take(int [],int.int)我无法改变

void foo(int[], int a, int b);

我想先调用它而不必先初始化数组。就像这样的事情

foo({1,2,3}, 1, 2)

int [] a = {1,2,3};
foo(a, 1, 2);

我正在使用MSVC 2013.我尝试了以下编译器抱怨的内容

foo( (int[]) {1,2,3}, 1, 2);

1 个答案:

答案 0 :(得分:1)

int[]作为参数等同于int*。因此,您可以使用data()成员函数返回其缓冲区的指针:

foo(std::vector<int>{1, 2, 3}.data(), 1, 2); // std::array can also be used

请注意std::vector在其析构函数运行时释放其缓冲区,在这种情况下,在完全评估临时出现的完整表达式时(;)。因此,请确保不要指向超出其生命周期的任何元素的指针,否则您将有一个悬空指针。解除引用所述悬空指针将产生未定义的行为