目前我正在开发一个 C++ 应用程序,我希望它是 const 正确的。意思是尽可能在参数上使用 const 之类的东西。然而,这个 C++ 应用程序使用的 C 库不经常使用 const。我遇到的问题是,当向 C 库中的函数发送参数时,参数不能是 const,因此我被迫进行强制转换。
使用 const cast 会损害我一直在努力实现的整个 const 正确性。当使用 const 不正确的 C 库时,您是否只是随波逐流,也不使用 const 正确性,以便轻松使用这些库?还是有我没有看到的更好的方法?请注意,这是一个相当小的程序,因此隔离使用该库的部分并使该部分不正确并不是一个真正的选择。
最佳答案
就我个人而言,我更喜欢在库边界使用不正确的强制转换。这种方法的好处是,您可以让代码受益于正确使用 const。缺点是,如果库修改了一个对象,即使是“暂时”,您已经放弃了 const,您的程序可能会出错。
例如,我见过 C 库采用它们不会在逻辑上修改的 char *
参数。但是,它们的解析器可能会暂时用零替换字符串中的分隔符,以便使用 strcpy 来提取它们。如果您放弃 const 以允许 C++ 函数采用 const char *,并且有人将指针传递给实际上是 const 的对象,则用零“临时”替换分隔符将导致错误。
关于c++ - 使用 C 库时 C++ 中的常量正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14168122/