为C库编写C++包装器。库中有一个函数接受缓冲区作为unsigned char *
。由于使用C++,我将真正的缓冲区存储在std::vector<char>
中,此外,在包装器类中,我还添加了const
,因为问题中的缓冲区是输入缓冲区,并且不会被修改。但我的代码无法编译,演示:
#include <stdio.h>
#include <vector>
void x(unsigned char *s)
{
printf("%s\n", s);
}
int main()
{
const std::vector<char> s(10);
x(reinterpret_cast<unsigned char *>(s.data())); // FAILS
}
id有什么问题吗?如果我从const std::vector<char> s(10);
中去掉consts
,它就可以工作了,但我更喜欢这种方式。
const_cast
而不是reinterpret_cast
。但为什么x
不接受const unsigned char*
? - overseasx()
不是正确的const
,它应该采用const unsigned char*
。2)reinterpret_cast
不能去除const
,它可以将const char*
转换为const unsigned char*
,但不能转换为unsigned char*
。如果您可以修改x()
,则无需删除s
的const
。 - Justin Time - Reinstate Monica