众所周知,应该避免使用 const_cast 来删除指针的 const-ness。
但反过来又如何呢?
对于我的用例,我有一个从非常量源缓冲区复制数据(字节)的函数。我认为一个好的设计决策是根据该源缓冲区完全 const 声明参数。
void copyfunction(const char* const data) { ... }
对于像下面这样的函数调用,这将导致指针类型错误“const char* const <-> char*”。
void main() {
char sourcebuffer[] = {0x00};
copyfunction(sourcebuffer);
}
当然,现在我可以简单地将其声明sourcebuffer
为 const,但在我的情况下,我无法访问该变量,因为它来自不同的代码位置(外部库)。
void main() {
char sourcebuffer[] = {0x00};
copyfunction(const_cast<const char* const>(sourcebuffer));
}
然而,超出的代码可以工作,但它是好的风格(根据我的用例)吗?
我认为声明copyfunction
as const 的参数可以确保用户不会修改(只读)指针或源缓冲区本身的位置。因此,在这种情况下, const_cast 只是启用函数调用而不是故意删除指针的 const-ness 所必需的邪恶......
问候