外部代码需要char *,但我使用的是const char *

时间:2020-07-22 11:40:26

标签: c++

我正在将文件映射到内存,并向第一个字节返回const char*

Mapper(const char* path, const char*& firstByte, size_t& fileSize);

但是我使用的外部代码(我无法更改)需要使用char*(尽管它不会更改缓冲区):

void externalCode(char* bytes);

所以我遇到了编译器错误(将const传递给非const),并且不得不将const数组复制到非const数组。

文件很大,所以我不想复制它们。最好的解决方案是什么?重载我的映射器以返回非常量? const-cast?

1 个答案:

答案 0 :(得分:6)

如果externalCode代表真实的小指承诺,则不会修改缓冲区,并且如果您无法修改缓冲区,那么我将使用const_cast编写一个包装器,其中参数是固定的:

void externalCodeFixed(const char* bytes) {
    externalCode(const_cast<char*>(bytes)); // NOTE bytes are not modified
}

如果不确定是在现在还是将来在某些情况下可以通过externalCode修改缓冲区-甚至可以暂时在函数中修改缓冲区,然后再修改回来,以免引起注意-那么您应该要么创建本地可修改副本,或将参数更改为指向非常量的指针。