什么是悲观?

时间:2015-09-16 21:14:21

标签: c++ optimization language-agnostic

Can the use of C++11's auto improve performance?这个问题的评论得分很多,并建议“让它不太可能无意中感到悲观”作为答案。我之前从未注意过这个词。我想这与优化相反。

任何人都可以提供更详细的定义吗? 在编程环境中它意味着什么?如何使代码失望?

3 个答案:

答案 0 :(得分:10)

它主要是言语,悲观主义者是乐观主义者的对立面。悲观的是编写的代码不是最佳代码。

编译器和程序员都可以通过使用不良构造来减少代码,例如在不需要时复制东西。 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 ... 
}

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

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

[不是auto的例子,我害怕]

答案 1 :(得分:7)

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

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

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

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

答案 2 :(得分:2)

您可以在字典中查找,例如this page,其中包含:

  

悲观(动词):

     

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