Optimization 带有访问修饰符的编程语言是否根据访问级别执行任何优化?

Optimization 带有访问修饰符的编程语言是否根据访问级别执行任何优化?,optimization,language-agnostic,compilation,programming-languages,Optimization,Language Agnostic,Compilation,Programming Languages,问题很简单 当符号、关键字等上存在访问修饰符时,哪些语言编译器(如果有)执行优化或编译怪癖 作为奖励:有没有没有没有访问修饰符的语言编译器可以做那些用它们做不到的优化?(换句话说,访问修饰符是否为了程序员的控制而阻止了优化) 编辑 确切地说,我指的是诸如public、private和protected之类的关键字,或者类似的构造。首先,语言不执行优化,编译器执行优化。因此,答案(通常)取决于编译器实现和您指定的编译器选项 大多数C++编译器根据 const 关键字进行大量的优化:它们预先计算编译

问题很简单

当符号、关键字等上存在访问修饰符时,哪些语言编译器(如果有)执行优化或编译怪癖

作为奖励:有没有没有没有访问修饰符的语言编译器可以做那些用它们做不到的优化?(换句话说,访问修饰符是否为了程序员的控制而阻止了优化)

编辑


确切地说,我指的是诸如public、private和protected之类的关键字,或者类似的构造。

首先,语言不执行优化,编译器执行优化。因此,答案(通常)取决于编译器实现和您指定的编译器选项

大多数C++编译器根据<强> const 关键字进行大量的优化:它们预先计算编译时计算的一切等等。

例如,考虑函数“分数”中的代码:

这段代码将在大多数编译器上以单个分子乘以预计算的sqrt倒数(2*3.14)

如果没有const关键字,相同的代码将导致在函数“分母”中乘以2和平方根,然后在函数“分数”中除法


还有许多其他改进优化的修改器示例。其中一些(如强制某些对齐)具有平台依赖性效果


如果您询问访问修饰符的可用性是否抑制优化,答案是“否”

如果您询问访问修饰符的不正确使用是否会抑制优化,答案是“是”:如果对代码中的每个变量应用volatile关键字,性能将下降,因为无法在寄存器中优化volatile变量



编辑:根据对此答案的评论,问题可能与私有/受保护/公共关键字有关。我不知道与这些关键字相关的任何优化,除了相关Java的关键字“final”。

在OO语言中,方法调用是动态调度的。如果编译器/运行时能够确定该方法只存在一个实现,并且该方法不会改变,那么它可以执行更积极的优化

从这个角度来看,
private
方法应该更容易优化。类似地,属于
密封的类的方法也更容易优化


我说“更容易”是因为现代编译器/运行时优化了很多东西,但它们需要依靠防护来确保在某些假设无效时优化是“非优化的”。参见Brian Goetz。

我不认为<代码> const 和<>代码> Value是访问修饰符,既不在普通词汇表中也不在法律术语中(它们是C和C++中的限定词,以及爪哇中的“修饰语”)。我们必须问OP,但我认为问题是关于
私有
受保护
公共
。问题确实是关于后面提到的修饰符(public,private,protected)。
const double yet_another_pi = 3.14;
double denominator() {
    return sqrt( 2*yet_another_pi );
}
double fraction( double numerator )
{
    return numerator / denominator();
}