无法更改调用接口时的initialize数组

initialize array on calling an interface cannot be changed

本文关键字:initialize 数组 接口 调用      更新时间:2023-10-16

我有一个无法更改的接口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);

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

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

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