众所周知,应该避免使用 const_cast 来消除指针的常量性。
但反过来又如何呢?
对于我的用例,我有一个从非常量源缓冲区复制数据(字节)的函数。
我认为一个好的设计决策是根据源缓冲区完全 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
因为 const 确保用户不会修改(只读)指针或源缓冲区本身的位置。
因此,在这种情况下, const_cast 只是启用函数调用所必需的邪恶,而不是故意删除指针的常量性......
Greets
你不应该使用const_cast
to add const
, 因为:
这是没有必要的。T*
隐式转换为const T*
。你的问题表明char sourcebuffer[] = {0x00}; copyfunction(sourcebuffer);
是一个错误,但事实并非如此。
它可能(尽管不太可能)有害。它可以去除volatile
来自指针类型,这不是这里的意图,并且如果sourcebuffer
被宣布为volatile sourcebuffer[]
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)