编译器优化的限制是什么?它有多聪明?

use*_*613 2 compiler-construction optimization

人们一直告诉我而不是写"向左移1位",只写"倍数2",因为它更具可读性,编译将足够聪明以进行优化.

通常还会编译什么,开发人员不应该这样做(代码可读性)?我总是写,string.length == 0而不是string == ""因为我在5 - 6年前的某个地方读过,说数字操作要快得多.这仍然是真的吗?

或者,大多数编译器都足够聪明以转换以下内容:

int result = 0; for (int i = 0; i <= 100; i++) { result += i; }

进入:int result = 5050;

您最喜欢的"优化"是什么,因为大多数编译都不会这样做?

jmk*_*yes 5

算法:到目前为止,地球上没有编译器可以为您选择更好的算法.太多人在他们进行基准测试后匆匆跳到了重写C部分,当他们应该真正考虑替换他们首先使用的算法时.