Я знаю, что для функции это просто будет встраиваемой:Не может ли компилятор определить, является ли переменная const самой?
int foo(int a, int b){
return a + b;
}
Но мой вопрос, не может компилятор просто автоматически определит, что это то же самое, как:
int foo(const int a, const int b){
return a + b;
}
И так как это может быть обнаружено, зачем мне нужно вводить const
? Я знаю, что ключевое слово inline
устарело из-за прогресса компилятора. Разве не время, что const
сделать то же самое?
Точка 'const' предназначена для предотвращения того, что вы ошибочно измените значение. При чтении длинной функции, если вы видите 'const int x' в начале, вы знаете, что в строке 300' x' остается неизменной даже без проверки предыдущего кода. – chi
Вы не набираете 'const' для компилятора, так как вы вводите его для себя. Вы говорите компилятору, чтобы пинать вас, если вы когда-либо попытаетесь изменить его значение. – Galik
Ваш пример не очень хороший. В этом конкретном случае, когда компилятор опускает это в форму SSA, он увидит, что 'a' и' b' не назначены и не являются «энергонезависимыми», поэтому они эффективно «const» и действуют соответственно. 'const' намного эффективнее, когда он применяется к _pointers_ или является частью интерфейса функции (его подпись), так как тогда компилятор может полагаться на обещания функции для оптимизации. –