什么是悲观?

DaB*_*ain 12 c++ language-agnostic optimization

关于这个问题的评论可以使用C++ 11来auto提高性能吗?获得了很多选票,并暗示"让它不太可能无意中感到悲观"作为答案.我以前从未注意过这个词.我想这与优化相反.

任何人都可以给出更详细的定义吗?在编程环境中它意味着什么?如何使代码看起来像悲观?

Mat*_*son 12

这主要是言语,悲观主义者是乐观主义者的对立面.而悲观的是编写的代码不是最优的.

编译器和程序员都可以通过使用不良构造来减少代码,例如在不需要时复制东西.该auto关键字将至少是确保您获得了"最接近的类型",所以没有(不必要的)类型转换.

请注意,当代码没有"不是最佳"的优点时,悲观情绪就是:

这并不是悲观的"如果我们花了六个月的时间来优化它,它的运行速度会提高0.5%".除非要求加快0.5%,否则花费六个月的时间可能是浪费时间.

此外,所需的功能,例如安全性,并不是悲观的:"代码比它可能更慢,因为我们使其安全".

调试构建是mot"pessimal",因为它有断言来捕获NULL指针解引用并检查数组访问的索引等.只要这些断言和检查被写入,使得它们在启用释放模式时"消失".[如果您的代码运行的是核电站,您可能不希望崩溃,请参阅上面的"安全性"]

我见过的一个老例子就是这个C字符串循环:

char str [large_number] = "... several kilobytes of text (read from file) ... ";

for(char *p = str; p < str+strlen(str); p++)
{
   ... do stuff with p ... 
}
Run Code Online (Sandbox Code Playgroud)

如果do stuff with p足够复杂,编译器将不会意识到这strlen是一个常量值,并将执行strlen循环的每次迭代.如果我们这样做,循环将运行得更快:

for(char *p = str, *e = str+strlen(str); p < e; p++)
{
   ... do stuff with p ... 
}
Run Code Online (Sandbox Code Playgroud)

[不是一个例子auto,我害怕]

  • 某些标准的大多数代码都不是最优的.我认为至关重要的一点是它不是最优的,没有收益. (3认同)

Jer*_*fin 7

悲观意味着不仅仅是提供不是最好的表现.

一般来说,它正在做一些事情,通常是为了提高性能,实际上会伤害性能.虽然不是绝对必要的,但通常暗示结果实际上比你刚刚做了一些简单而明显的事情更糟糕.

在这种情况下,使用auto指定变量的类型很简单明了 - 无论它是否精确最优,它都建立了基线性能水平.当/如果你明确指定了类型,你基本上只有两个选择:显式定义相同的类型auto将推断(获得完全相同的性能),或指定其他类型(在这种情况下,实际上只有两种可能性:它根本不起作用,或者它会进行某种几乎不可避免地损害性能的转换).

总结:悲观化通常不仅仅是"降低最佳性能".通常"做额外的工作(可能希望提高性能)实际上会伤害到性能."


Rom*_*nko 5

您可以在字典中查找它,例如这个页面,它说:

悲观(动词):

(及物)使(某事)效率降低,例如计算机程序。