2

目前我正在使用 C++ 开发一个应用程序,我希望它是正确的。意味着尽可能在参数上使用 const 之类的东西。然而,这个 C++ 应用程序使用了一个不经常使用 const 的 C 库。我遇到的问题是当向 C 库中的函数发送参数时,参数不能是 const,所以我不得不进行强制转换。

使用 const cast 有损于我一直在努力的整个 const 正确性。当使用 const 不正确的 C 库时,您是否只是顺其自然而不使用 const 正确性以便轻松使用这些库?或者有没有更好的方法我没有看到?请注意,这是一个相当小的程序,因此隔离使用该库的部分并仅使该部分不正确不是真正的选择。

4

1 回答 1

4

就个人而言,我更喜欢在不正确的库边界使用强制转换。这种方法的好处是您允许您的代码获得正确使用 const 的好处。不利的一面是,如果库修改了一个对象,即使是“暂时的”,你已经抛弃了 const,你的程序可能会出错。

例如,我见过 C 库采用char *它们不会在逻辑上修改的参数。但是,他们的解析器可能会暂时用零替换字符串中的分隔符以strcpy用于提取它们。如果您抛弃 const 以允许 C++ 函数采用 a const char *,并且有人将指针传递给实际上是 const 的对象,则用零“临时”替换定界符将导致错误。

于 2013-01-05T02:59:37.540 回答