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


этот вопрос уже есть ответ здесь:

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

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

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

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

2 64

2 ответа:

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

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

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

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

}