对Can the use of C++11's auto
improve performance?这个问题的评论得分很多,并建议“让它不太可能无意中感到悲观”作为答案。我之前从未注意过这个词。我想这与优化相反。
任何人都可以提供更详细的定义吗? 在编程环境中它意味着什么?如何使代码失望?
答案 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,其中包含:
悲观(动词):
(及物性)使(某事物)效率降低,例如计算机程序。