将std ::向量作为指针参考
Passing a std::vector as a pointer reference
我的函数具有以下签名,我无法更改:
bool function(uint8_t*& data, uint32_t size)
我想通过一个std矢量,我能够按以下方式进行:
std::vector<uint8_t> buffer;
buffer.reserve(10);
buffer.resize(10);
uint8_t* data = &buffer[0];
function(data, buffer.size()))
有没有办法避免创建data
指针?以下没有编译:
function(&buffer[0], buffer.size()))
给出no matching function
错误。
这里的主要问题是,如果function
对指针进行引用,它可能会修改它,从而导致意外结果。
如果您确定该函数不会修改指针本身,则可以添加过载以简化要完成的操作:
bool function(uint8_t*& data, uint32_t size) {
return false;
}
// overloaded on rvalue reference to pointer
bool function(uint8_t*&& data, uint32_t size) {
return function(data, size);
}
int main() {
std::vector<uint8_t> buffer;
buffer.reserve(10);
buffer.resize(10);
function(buffer.data(), buffer.size());
}
考虑到这是危险,尤其是在function
修改指针时,请谨慎使用。
实时演示
您可能需要此:
uint8_t* data = buffer.data(); // data will point to the first element of the vector
function(data, buffer.size());
// function may have modified the data pointer at this point
现在我会很有趣的是function
的功能,特别是如果它确实修改了data
。
btw:imo buffer.reserve(10);
是没有用的,因为无论如何您都有一个buffer.resize(10);
。
相关文章:
- 我可以有一个 ELI5 作为参考和指针以及何时使用它们吗?
- 类的方法和对象。参考?智能指针?简单的初始化?
- 我正在学习C++,我不能使用指针访问参考吗?(举个例子)
- 使用指针向量到参考向量是非法的吗?
- 函数参数绑定通过参考与传递指针传递数组的规则
- 参考参考static_cast的成本和指向指针static_cast的指针
- 函数采用原始指针试图通过错误msg中概述的参考来接受指针
- 为什么即使传递给函数作为参考,指针也未被分配
- 为什么通用参考概念不适用于函数指针的地图插入
- 是指代指针正交的参考文献
- 超载函数既不按值,也不是通过参考来对象,而是将撤销的指针换成对象
- 从参考中获取的指针可以在定义明确的C 中取无效
- 指针与参考示例,在什么情况下更好
- 为什么要拿参考的地址给我一个第二等级的指针
- 如何提升::序列化指针和参考
- 在范围外丢失指针参考
- 将std ::向量作为指针参考
- 从指针参考C 创建一个新对象
- 从基本指针/参考调用正确的免费功能
- 在操作员过载的情况下处理悬空指针/参考