【问题标题】:C gotchas and mistakes for C++ programmers [closed]C++程序员的C陷阱和错误[关闭]
【发布时间】:2011-06-07 16:51:39
【问题描述】:

如果你是 C 程序员或精通 C 的 C++ 程序员,你能告诉我你从 C++ 程序员那里注意到的最常见的错误/模式/风格是什么?例如,您是否注意到 C 程序员编写的 C 程序与 C++ 程序员编写的 C 程序之间的区别?如果您能提供一份清单,说明 C++ 程序员对 C 的主要误解,我将不胜感激。

我想学习 C,但是虽然有 C++ 的背景会有所帮助,但我担心它也会受到伤害。我有一个奇怪的假设,除了一些关键字和库之外,我不需要学习其他任何东西,因为我知道 C++。我对有这种假设感到难过,因为我确实认识到 C++ != C,但是当我在 C++ 中使用 C 库或维护其他人的遗留程序 C++ 时,有时差异会变得模糊。

顺便说一句,我不是在问 C 中没有哪些 C++ 特性,或者我们/他们是否使用“malloc”而他们/我们是否使用“new”。

谢谢。

【问题讨论】:

  • 您需要回到之前回答过的问题,寻找最相关的答案并点击旁边的复选标记。
  • @GWW,谢谢,我今天学到了一些东西!

标签: c++ c coding-style paradigms


【解决方案1】:

我经常看到的一件事是正确释放分配的内存。特别是与包含动态分配内存的结构相关联。使用 C++,析构函数会被自动调用,如果编写得当,它们会负责清理关联的对象。使用 C,您必须记住释放所有分配给结构的内存,或者记住调用某种为您执行此操作的 destruct 函数。

【讨论】:

    【解决方案2】:

    我不确定我是否会称其为“错误”,但必须使用 C 的有经验的 C++ 程序员可能会创建很多看起来像类和虚函数表的东西。

    这不一定是坏事,因为您当然可以在 C 中进行面向对象编程,但对于特定问题来说,这可能是矫枉过正。

    【讨论】:

    • “一个必须使用 C 的有经验的 C++ 程序员可能会创建很多看起来像类和虚函数表的东西。”有趣的是,您应该提到这一点,尽管我不是一个经验丰富的 C++ 程序员,但我最近有一个想法,即使用包含函数指针的结构来实现一个类对象。
    【解决方案3】:

    我不能从个人经验中真正说出,但我相信你可能会遇到一些微妙的问题,比如引用(在变量名前面加上 &)作为函数参数,enums 不完全像在 C++ 中一样的限定类型,涉及返回 void 指针的内存函数的东西……诸如此类。

    【讨论】:

      【解决方案4】:

      基本上,当您找到惯用的 C 代码时,它看起来与惯用的 C++ 代码相似,只是您必须破解所有缺少的语言功能并实现自己的半成品版本。例如,宏 -> 模板/内联函数。 void* 指针-> 继承。函数指针->函数对象。异常->转到和错误代码。

      【讨论】:

      • 惯用 C 确实 not 看起来类似于惯用 C++。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 2017-05-11
      • 1970-01-01
      • 2015-06-06
      相关资源
      最近更新 更多