c++ - 使用 C 库时 C++ 中的常量正确性

标签 c++ constants const-correctness

目前我正在开发一个 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/

相关文章:

c++ - 堆分配的 const 对象与非 const 对象有何不同?

c++ - 使用 Xcode 4 在 C++ 中编程

c++ - 取消IoEx : Function pointer typedef

c++ - Const 关键字用法 C++

c++ - 在运行时使用不同的构造函数

C++ QList 常量正确性

c++ - OpenMp 并行

c++ - 将数据 float 到 uint8_t 和 memcpy ,返回 null

C++常量如何使它们工作

C 中的 char* 与 const char*