Зачем использовать параметр const int при перегрузке оператора подстрочного индекса?

StackOverflow https://stackoverflow.com//questions/21042437

  •  21-12-2019
  •  | 
  •  

Вопрос

Я новичок в C++, поэтому не могли бы вы, пожалуйста, объяснить, почему / когда я должен использовать это

int & MyArray::operator[] (const int i)
{
    return arr[i];
}

вместо этого

int & MyArray::operator[] (int i)
{
    return arr[i];
}
Это было полезно?

Решение

Это не имеет огромных различий!

Некоторые люди любят лечить параметры как неизменные, поэтому они помечают их как const.В этом случае это стилистическое.

Другие советы

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

Эти два на самом деле являются одной и той же декларацией, и по этой причине следует избегать генеракодичета верхнего уровня в параметрах функций:

void foo(int);
void foo(const int); // re-declaration of above function
.

В функции Определение , это означает, что вы не можете изменить копию аргумента в вашей функции:

void foo(int i) { i++; } // OK
void foo(const int i) { i++; } // Error
.

Итак, его можно использовать в качестве артефакта реализации, чтобы выразить, что локальная переменная является const.Это дает компилятору больше возможностей для выполнения оптимизаций.

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

Параметр i передается по значению и является простым типом данных, оно копируется, поэтому, когда вы помечаете его как const вы сообщаете компилятору, что он не может измениться внутри метода, но поскольку это копия, это вообще не важно, и в этом конкретном примере вы просто используете его в качестве индекса.

обе формы верны.Используйте первый, если вы хотите убедиться, что параметр «i» не будет изменен в функции, что может быть полезно, если функция длиннее / более сложная. Однако в декларации оператора не используйте const:

int& operator[](int i);
.

законно иметь декларацию без const, а определение с ним.

как правило генерала, все, что вы не намерены модифицировать, должен быть const

If you not trying to edit your parameter then its better to use const.

As far as performance is concerned not much difference. But it safeguards your parameter from editing (accidentally) inside function.

int & MyArray::operator[] (const int i)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top