无法更改调用接口时的initialize数组
initialize array on calling an interface cannot be changed
我有一个无法更改的接口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
将释放其缓冲区,在这种情况下,当临时出现的完整表达式(在;
)被完全求值时。因此,请确保在元素的生命周期之外不要持有指向任何元素的指针,否则您将有一个悬空指针。取消引用所述悬挂指针将产生未定义的行为。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '