让我们忽略方法,只看const对象; 编译器在这里有更多的优化机会。如果一个对象被声明为const,那么(ISO / IEC 14882:2003 7.1.5.1(4)):除了可以修改声明为mutable(7.1.1)的任何类成员之外,任何在其生命周期内修改const对象的尝试(3.8)都会导致未定义的行为。
让我们忽略可能具有可变成员的对象 - 编译器可以自由地假设该对象不会被修改,因此它可以产生重要的优化。这些优化可以包括以下内容:将对象的值直接合并到机器指令操作码中
完全消除永远无法访问的代码,因为const对象用于编译时已知的条件表达式
如果const对象控制循环的迭代次数,则循环展开
请注意,只有当实际对象是const时,这个东西才适用 - 它不适用于通过const指针或引用访问的对象,因为这些访问路径可能导致非const的对象(它甚至可以很好地定义为通过const更改对象)指针/引用,只要实际对象是非const并且您丢弃了对象的访问路径的常量)。
在实践中,我认为没有编译器可以对各种const对象执行任何重要的优化。但对于原始类型的对象(整数,字符等),我认为编译器可以非常积极地优化这些项的使用。