"旧"C功能可能比新C++功能更好的情况?

Pet*_*erK 16 c c++

最近,我有跟我的老板谁鼓励我在用C++流和坚持"好老"的讨论(很长一段时间C语言开发)printf和朋友.现在我可以理解他为什么这么说并相信我没有听从他的建议.

但是,这仍然是窃听我-有没有用C事情是在某些情况下仍较好比相同/相似的事情新C++实现?更好的意思是例如性能,稳定性甚至代码可读性/可维护性.如果是这样,有人可以给我一些例子吗?我主要讨论像printf/streams这样的类似差异,而不是关于继承或OOP等功能.我问这一切的原因是我认为自己是一个C++开发人员,因此我总是尝试编写C++方式.

小智 9

C printf() - 样式输出通常比C++ ostream输出快.但当然它无法处理C++输出的所有类型.这是我所知道的唯一优势 - 通常,由于积极的内联,C++可以比C快很多.

  • @Fred:因为大多数愚蠢的开发人员经常使用`endl` (4认同)
  • 写入`cout`有另外一种开销 - "流"实际上最终至少有两个类(流本身和一个streambuf)来回传递数据,通常需要复制几次.解析格式字符串比听起来容易得多; 基本上你只需要搜索%字符. (3认同)

Nor*_*ame 9

C程序员有时会指出一件事,值得考虑的是:如果你远离宏,那么C代码行的作用就显而易见了.以此为例:

x = y;

在C中,这是一个赋值,只有一个赋值.y的值是(在可能的转换之后)复制到x中.

在C++中,这可能意味着什么.

  • 一个简单的任务,
  • y中用户定义的转换运算符,它删除互联网并返回与x相同类型的值
  • 在熔化核电站之后,有一个构造函数从y开始生成x类型的对象.该值分配给x.
  • 存在用户定义的分配运算符,其允许从一堆其他类型进行分配,其中y具有转换运算符或者可以从y获得的一些其他方式.赋值运算符有一个可能会产生黑洞的错误,因为它是LHC操作软件的一部分.
  • 更多以上内容.

为了使它更有趣,每个单独的操作都可能在C++中抛出一个异常,这意味着每一行都必须以能够回滚它改变的方式编写,当你不能说实际的行时,这有时很难确实.更糟糕的是,您的程序可能会立即崩溃,因为异常发生是因为在异常展开期间调用了赋值.在C++中,事物往往变得"垂直复杂",这对开发人员的能力和沟通技巧提出了自己的要求.

  • 我对这个论点感慨万千.如果您要承担恶意代码,请告诉我如何容忍这样的C代码:`foo(0)`?如果`foo`是一个删除互联网的功能,融化核电站*并*创造一个黑洞怎么办?就像C程序员假设函数调用会按照它在框中所说的那样执行,为什么C++程序员不能假设赋值运算符将执行赋值,而没有别的呢? (16认同)
  • @jalf:AC程序员知道foo(0)可能会破坏月亮而x = 1可能不会,他可以轻松地将程序划分为"安全"叶子区域(不包含函数调用)和不安全的"分支"区域(这需要知道函数的作用以及它们可能出错的地方)并且他可以单独告诉*语法特征*如果他在叶子或分支部分.你不能再用C++做到这一点,几乎每个表达式都可能会在一个被遗忘的库中调用一个函数的分支......然后爆炸!Ctuhluh吃掉了我们的灵魂! (7认同)