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

    

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

    

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

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

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

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

68 голосов | спросил Daniel Scocco 3 Jpm1000000pmTue, 03 Jan 2012 19:06:11 +040012 2012, 19:06:11

2 ответа


0

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

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

ответил Ernest Friedman-Hill 3 Jpm1000000pmTue, 03 Jan 2012 19:07:56 +040012 2012, 19:07:56
0

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

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

}
ответил psur 3 Jpm1000000pmTue, 03 Jan 2012 19:12:50 +040012 2012, 19:12:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132