Не является ли "const" избыточным при передаче по значению?

Я читал свою книгу на С++ (Deitel), когда я натолкнулся на функцию для вычисления объема куба. Код следующий:

double cube (const double side){
    return side * side * side;
}

Объяснение использования квалификатора "const" было следующим: "Для определения принципа наименьших привилегий следует использовать" const ", сообщая компилятору, что функция не изменяет переменную сторону".

Мой вопрос: не используется здесь "const" избыточно/ненужно, поскольку переменная передается по значению, поэтому функция не может ее изменить?

Ответ 1

Квалификатор const предотвращает изменение кода внутри функции от самого параметра. Когда функция больше, чем тривиальный размер, такая уверенность помогает вам быстро прочитать и понять функцию. Если вы знаете, что значение side не изменится, вам не придется беспокоиться о том, чтобы отслеживать его значение с течением времени, когда вы читаете. В некоторых случаях это может даже помочь компилятору генерировать лучший код.

Нетривиальное число людей делает это, как само собой разумеющееся, учитывая, что это вообще хороший стиль.

Ответ 2

Вы можете сделать что-то вроде этого:

int f(int x)
{
   x = 3; //with "const int x" it would be forbidden

   // now x doesn't have initial value
   // which can be misleading in big functions

}