在 C 代码中使用/混合 C?

新手上路,请多包涵

在 C++ 中使用 C 不好?

许多人告诉我,在 C++ 中使用 C 很糟糕,因为它不安全,而且需要更多的内存管理。我一直告诉他们,只要您知道自己在做什么,并且删除“新”并释放“malloc”,那么C就不是问题。

我目前在一个论坛上,关于 std::stringchar* 的争论正在发生。有人说分配一个简单的 char* 内存块效率更高,只要解除分配就可以了。另一方面,我们有人说 std::string 更好,因为它不涉及内存管理但效率较低。

所以这里的主要问题是:

  • 混合 C/C++ 不好?在编写 C++ 代码时是否应该只使用 100% C++?

任何答案将不胜感激!

原文由 Brad 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 400
1 个回答

我一直告诉他们,只要你知道你在做什么,并且你删除你的新文件并释放你的 malloc,那么 C 就不是问题。

这是真实的;如果您非常小心并确保手动清理东西,那么这不是问题。但是你真的有时间去做吗?每次调用 new 都可以抛出 std::bad_alloc 。您是否 总是 捕获 每个 可以抛出的异常并手动清理任何资源?

我会冒险猜测答案是否定的,因为编写这样的代码非常乏味,而且很难绝对确定这样编写的代码是正确的,即使在极少数失败的情况下也是如此。

如果答案是“是”,那么您为什么要浪费这么多时间来担心资源管理?范围绑定资源管理(SBRM;通常称为资源获取即初始化 (RAII))之类的 C++ 习惯用法和标准模板库之类的库可帮助您更轻松地编写正确的代码。当你不需要的时候,为什么要以艰难的方式做事?

编码 C++ 时是否应该只使用 100% C++?

是的,但是如果有一个 C 库可以满足您的需要,或者如果您有想要使用的遗留 C 代码,您当然可以使用该代码;一定要小心。与 C 代码互操作的最简洁的方法通常是围绕它编写一个 C++ 包装器。

原文由 James McNellis 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题