将const std :: vector <char>转换为unsigned char*?

J. *_*Doe 3 c++ const stdvector

为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
}
Run Code Online (Sandbox Code Playgroud)

id有什么问题?如果我删除constsconst std::vector<char> s(10);它的工作原理,但我会喜欢你这样.

小智 7

你所要做的const_cast去除常量性,然后reinterpret_castchar *unsigned char *

试试这个: x(reinterpret_cast<unsigned char*>(const_cast<char *>(s.data())));

注意:但是请记住,const_cast只有在您投射最初为非const的变量时才是安全的.看到这个答案.