例如printf
而不是cout
, scanf
而不是cin
,使用#define
宏等?
我不会说坏,因为这将取决于个人选择。 我的策略是当C ++中有类型安全的替代品时,使用它们会减少代码中的错误。
这取决于哪些function。 在C ++中使用define
宏是非常不受欢迎的,并且有充分的理由。 您几乎总是可以使用C ++(模板,内联函数等)中更易于维护和安全的东西来替换define
宏的使用。
另一方面,Streams被一些人正确判断为非常慢,我已经看到很多有效且高质量的C ++代码使用C的FILE*
而不是其主机。
还有一件事:对于过多的流格式化可能性,对于像简单的调试打印输出这样的东西,恕我直言,你只是无法击败printf
及其格式字符串的简洁性。
你绝对应该用printf
代替cout
。 后者确实允许你创建printf
允许的大部分或全部格式化控件,但它以有状态的方式完成。 即当前格式化模式存储为(全局)对象的一部分。 这意味着错误的代码可能会使cout
处于后续输出格式错误的状态,除非您每次使用它时都重置所有格式。 它还会对线程使用造成严重破坏。
我会说唯一真正有害混合的是malloc
/ free
和new
/ delete
之间的配对。
否则它真的是一种风格的东西……虽然C与C ++兼容,但是当C ++拥有你需要的所有东西而不退缩时,你为什么要混合使用这两种语言呢?
对于大多数情况,有更好的解决方案,但不是全部。
例如,人们经常使用memcpy
。 我几乎永远不会这样做(除了真正的低级代码)。 我总是使用std::copy
,甚至是指针。
输入/输出例程的计数相同。 但有时候,C风格的printf
比cout
更容易使用(特别是在日志记录中)。 如果Boost.Format不是一个选项那么肯定,使用C.
#define
完全是一个不同的野兽。 它不是真正的C-onlyfunction,在C ++中有许多合法用途。 (但还有更多不是。)
当然你永远不会用它来定义常量(这就是const
的用途),也不是用来声明内联函数(使用inline
和模板!)。
另一方面,生成调试断言并且通常作为代码生成工具通常是有用的。 例如,我是unit testing类模板而没有广泛使用宏,这将是* ss的真正痛苦。 在这里使用宏并不好,但它可以节省数千行代码。
对于分配,我会完全避免使用malloc / free并坚持使用new / delete。
不是真的, printf()
比cout
快得多,而且c ++ iostream库非常大。 这取决于用户偏好或程序本身(是否需要?等)。 此外, scanf()
不再适合使用,我更喜欢fgets()
。
可以使用或不仅仅取决于将使用的编译器。 由于您使用c ++编程,在我看来,为了最大化兼容性,最好使用c ++提供的代替c函数,除非您没有任何其他选择。
从一个稍微不同的角度来看,我会说在C中使用scanf很糟糕,更别提C ++了。 用户输入远远不变,可以使用scanf可靠地解析。
我只是发表评论到另一个回复,但因为我不能…因为国际化,C的printf()比C ++的iostream更好。 想要翻译字符串并将嵌入的数字放在不同的位置? 用ostream做不到。 printf()的格式规范本身就是一个完整的小语言,在运行时解释。
需要了解更多c/c++开发分享在C ++中使用Cfunction是不好的做法吗?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享在C ++中使用Cfunction是不好的做法吗?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979088.html