代码之家  ›  专栏  ›  技术社区  ›  Gustavo Puma

在C++中使用C特性是不是坏的实践?

  •  18
  • Gustavo Puma  · 技术社区  · 15 年前

    printf 而不是 cout , scanf 而不是 cin ,使用 #define

    10 回复  |  直到 15 年前
        1
  •  17
  •   Naveen    15 年前

    我不会说不好,因为这取决于个人的选择。我的策略是当C++中有一个类型安全的替代品时,使用它们,因为它会减少代码中的错误。

        2
  •  15
  •   Eli Bendersky    15 年前

    这取决于哪些功能。使用 define C++中的宏是非常不赞成的,而且是有充分理由的。你几乎总是可以用 宏,在C++中有更可维护和安全的东西(模板,内联函数等)

    另一方面,流被一些人正确地判断为非常慢,并且我已经看到很多有效且高质量的C++代码,它们使用C语言。 FILE* 而不是它的一系列功能。

    还有一件事:考虑到流格式化的可能性过多,对于像简单调试打印输出这样的东西,IMHO的简洁性是无法战胜的 printf 以及它的格式字符串。

        3
  •  8
  •   R.. GitHub STOP HELPING ICE    15 年前

    你一定要用 printf cout . 后者 允许您制作大部分或所有格式控件 允许,但它在 有状态的 是的。即,当前格式模式存储为(全局)对象的一部分。这意味着坏代码可以离开 库特 除非每次使用时都重置所有格式,否则后续输出的格式都会错误。它还会严重破坏线程的使用。

        4
  •  8
  •   Justin Niessner    15 年前

    我想说的是,唯一真正有害的混合是之间的配对 malloc free new / delete .

        5
  •  7
  •   Konrad Rudolph    15 年前

    大多数情况下都有更好的解决方案,但不是所有情况下都有。

    例如,人们经常使用 memcpy . 我几乎永远不会那样做(除了在家里) 真正地 std::copy ,甚至在指针上。

    printf cout (特别是在伐木方面)。如果Boost.格式不是一个选项那么当然,用C。

    #define

    当然你永远不会用它来定义常量(这就是为什么 const inline

    另一方面,生成调试断言和代码生成工具通常很有用。例如,Im单元测试类模板和没有大量使用宏,这将是一个真正的痛苦在*ss。在这里使用宏并不好,但它确实节省了数千行代码。

        6
  •  2
  •   Chris O    15 年前

    对于分配,我将完全避免使用malloc/free,而只使用new/delete。

        7
  •  0
  •   Ruel    15 年前

    printf() 比…快得多 cout ,并且c++iostream库相当大。这取决于用户偏好或程序本身(是否需要?等等)。也, scanf() fgets() .

        8
  •  0
  •   Yash    15 年前

    可以使用什么或不使用什么取决于将要使用的编译器。因为您是用c++编程的,在我看来,为了最大限度地提高兼容性,最好使用c++提供的功能而不是c函数,除非您没有其他选择。

        9
  •  0
  •   JeremyP    15 年前

    从一个稍微不同的角度来看,我认为在C中使用SCANF是不好的,不要介意C++。用户输入离用scanf可靠地解析变量还很远。

        10
  •  -1
  •   paulsomebody    15 年前

    我只是对另一个回复发表评论,但既然我不能。。。由于国际化,C的Prtff()优于C++的IOFSoW。要转换字符串并将嵌入的数字放在其他位置吗?用奥斯特雷姆做不到。printf()的格式规范本身就是一种小型语言,在运行时进行解释。

    推荐文章