uint8_t类型向量的内存地址
Memory address of vector of uint8_t
我在一个类中有以下数据:
std::vector<uint8_t> mData;
我使用的一个库函数(来自SDL)需要一个void*来表示像素缓冲区地址。我尝试编写以下类成员函数:
uint8_t* GetBuffer() const { return &mData[0]; }
但是我得到错误:
error: invalid conversion from 'const value_type* {aka const unsigned char*}' to 'uint8_t* {aka unsigned char*}' [-fpermissive]
我很困惑为什么我得到这个错误(向量内存在一个类中分配),为什么它试图返回一个const地址?如果我仍然想避免动态分配内存,那么解决这个问题的最佳方法是什么?
一个const
方法的this
指针是const
,因此是它的成员。mData
因此是const
。
返回const uint8_t*
或使方法非const:
uint8_t* GetBuffer() { return &mData[0]; }
const uint8_t* GetBuffer() const { return &mData[0]; }
你的函数被标记为const
,所以返回一个const地址是唯一有意义的事情。
删除const
将解决这个问题,因为将const
添加到返回的指针。如果这个函数确实应该为const
,但返回一个非const指针,那么将vector标记为mutable
可能是正确的;const_cast
可能也是安全的,但在使用之前,您可能需要询问何时真正安全的细节。然而,大多数情况下,这样的问题出现,你的设计有问题,应该重新设计。
相关文章:
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 使用内存地址访问结构的属性值
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 将布局映射到内存地址
- 为什么同一个变量的内存地址不同?
- 无法将内存地址转换为值
- 给定特定内存地址的数组的动态内存分配
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 获取 R 数据帧的内存地址
- c++ 编译器是否保护常量内存地址免受任何更改?
- 如何防止矢量的内存地址更改
- cout 打印内存地址而不是值
- 如何运行外部程序,向其传递内存地址以读取/写入?
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- 重载 ostream << 运算符,指针作为参数,导致输出上的内存地址
- C++在变量的内存地址上做什么来"deallocate"它?
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 为什么我无法获取 MSVS2019 / C++ 中字符或uint8_t变量的内存地址?