我正在将文件映射到内存,并向第一个字节返回const char*
:
Mapper(const char* path, const char*& firstByte, size_t& fileSize);
但是我使用的外部代码(我无法更改)需要使用char*
(尽管它不会更改缓冲区):
void externalCode(char* bytes);
所以我遇到了编译器错误(将const传递给非const),并且不得不将const数组复制到非const数组。
文件很大,所以我不想复制它们。最好的解决方案是什么?重载我的映射器以返回非常量? const-cast?
答案 0 :(得分:6)
如果externalCode
代表真实的小指承诺,则不会修改缓冲区,并且如果您无法修改缓冲区,那么我将使用const_cast
编写一个包装器,其中参数是固定的:>
void externalCodeFixed(const char* bytes) {
externalCode(const_cast<char*>(bytes)); // NOTE bytes are not modified
}
如果不确定是在现在还是将来在某些情况下可以通过externalCode
修改缓冲区-甚至可以暂时在函数中修改缓冲区,然后再修改回来,以免引起注意-那么您应该要么创建本地可修改副本,或将参数更改为指向非常量的指针。