﻿# V120\. Member operator\[\] of object 'foo' is declared with 32\-bit type argument, but is called with memsize type argument\.


> Это правило входит в группу "Диагностика 64\\\-битных ошибок"\\\. Разработка правил этой группы больше не ведётся, и в будущем они могут быть отключены\\\. Если вы используете эти правила, \[свяжитесь с нашей поддержкой\]\(https://pvs\-studio\.ru/ru/about\-feedback/\) — мы поможем найти замену или предложим альтернативное решение\\\.

Анализатор обнаружил потенциально возможную ошибку при работе с классами, в которых имеется operator\[\]\.

Классы с перегруженным operator\[\] обычно представляют собой разновидность массива и аргументом operator\[\] является индекс запрашиваемого элемента\. Если operator\[\] имеет формальный аргумент 32\-битного типа, а в качестве фактического аргумента используется memsize\-тип, то это может свидетельствовать об ошибке\. Рассмотрим пример, приводящий к сообщению V120: 

```cpp
class MyArray {
  int m_arr[10];
public:
  int &operator[](unsigned i) { return m_arr[i]; }
} Object;
size_t k = 1;
Object[k] = 44; //V120
```

 Данный пример не содержит ошибки, но может свидетельствовать об архитектурной недоработке\. Необходимо или работать с классом MyArray используя 32\-битные индексы или модифицировать operator\[\], чтобы он принимал аргумент типа size\_t\. Второй вариант предпочтительней, так как использование memsize\-типов не только делает программу более надежной, но и в ряде случаев позволяет компилятору построить более эффективный код\.

Родственными диагностическими сообщениями являются [V108](https://pvs-studio.ru/ru/docs/warnings/v108/) и [V302](https://pvs-studio.ru/ru/docs/warnings/v302/)\.