我有一个接口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);
答案 0 :(得分:1)
int[]
作为参数等同于int*
。因此,您可以使用data()
成员函数返回其缓冲区的指针:
foo(std::vector<int>{1, 2, 3}.data(), 1, 2); // std::array can also be used
请注意std::vector
在其析构函数运行时释放其缓冲区,在这种情况下,在完全评估临时出现的完整表达式时(;
)。因此,请确保不要指向超出其生命周期的任何元素的指针,否则您将有一个悬空指针。解除引用所述悬空指针将产生未定义的行为。