在C++程序中使用C是不好的吗?
虽然这是一个主观问题:在我看来,尽量避免在C++程序中使用C。
很多人告诉我,在C++中使用C不好,因为它不如安全,并且需要更多的内存管理。我一直告诉他们,只要你知道自己在做什么,并删除你的new和释放你的malloc,那么C就不是一个问题。
你正在重新引入c++旨在克服的缺陷和危险,并且这不是c++程序的做法。
我会定期检查/拒绝/重写进入代码库的“具有C ++功能的C”或“具有C功能的C ++”代码。我甚至会将malloc、free等修改为assert在根名称空间中(以及其他事情)。
我目前在一个论坛上,讨论std::string与char *之间的争论。有些人说,分配一个简单的char*内存块更有效率,只要你释放它就可以了。另一方面,我们有人说std::string更优越,因为它没有涉及到内存管理,但效率较低。
在 c++ 中,表示字符串的选项比 std::string 更多。
依我之见,完全可以创建一个新类来表示字符串并服务于特定目的,或者遵循附加合同(必要时)。这种字符串表示的一部分合同是(当然)使用new[]/delete[]
来管理它们自己的资源,当使用动态内存时。
如果效率非常重要,而对于特定任务来说 std::string
不够理想,那么 c++ 足以表达您在这些特定情况下的意图,通过创建 c++ 中的专用接口。有很多情况下这是可接受的(依我之见),但不总是值得投入时间。无论如何,与将 C 语言习惯 / 风格 / 危险整合到 c++ 程序中相比,这更容易管理。
因此,主要问题是:混合使用 C/C++ 是不好的吗?在编写 c++ 时,你应该仅使用 100% 的 c++ 吗?
最好为您的需求创建可重用的基于对象的解决方案。提供的示例中的危险可以完全封装起来(如果此优化确实值得投入时间),并编写以使用 c++ 习惯方式的代码,而不会损失性能并具有更好的可维护性。
int main() { int class = 2; }
(这是有效的C代码,但不是有效的C++代码)。C++不是C的超集;C和C++共享一个公共子集。 - James McNellis