目前我正在使用C ++开发一个应用程序,我希望它是const正确的。意思是尽可能在参数上使用const,以及类似的东西。但是,这个C ++应用程序使用了一个不经常使用const的C库。我遇到的问题是当向C库中的函数发送参数时,参数不能是常量,所以我不得不进行强制转换。
使用const cast类型会减损我一直在努力的整体const正确性。使用非常规的C库时,您是否只使用流程并且不使用const正确性以便轻松使用这些库?还是有更好的方式,我没有看到?请注意,这是一个相当小的程序,因此隔离使用该库并使该部分不是const正确的部分实际上不是一个选项。
答案 0 :(得分:4)
就个人而言,我更喜欢在库的边界使用非常正确的强制转换。这种方法的好处是允许您的代码获得正确使用const的好处。缺点是,如果库修改了一个对象,即使是“临时”,你已经将const转换为const,那么你的程序就会出错。
例如,我见过C库带有char *
个参数但它们没有逻辑修改。但是,它们的解析器可能会暂时用零替换字符串中的分隔符,以使用strcpy
来提取它们。如果你抛弃const以允许C ++函数取const char *
,并且有人将指针传递给实际为const的对象,则用零替换分隔符的“临时”将导致错误。