У меня следующий код c ++:
inline int choose(int i){
static constexpr int arr[]={1,3,3,2,4,1,4};
return arr[i];
}
void f(int);
int main(){
for(int i=0;i<5;i++){
f(choose(i));
}
}
Когда я компилирую это с g ++ 8.2 с опцией -O3, он выдает хорошо оптимизированный asm-код .Однако, когда я изменяю вторую строку с static constexpr
на constexpr
, которая должна быть семантически одинаковой, она больше не оптимизирует доступ к массиву и выдает несколько неэффективный асм-код .
У кого-нибудь есть идеи, почему это происходит?