﻿# V302\. Member operator\[\] of 'foo' class has a 32\-bit type argument\. Use memsize\-type here\.


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

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

Рассмотрим пример, приводящий к сообщению V302:

```cpp
class MyArray {
  std::vector<float> m_arr;
  ...
  float &operator[](int i)  //V302
  { 
    DoSomething();
    return m_arr[i];
  } 
} A;
...
int x = 2000;
int y = 2000;
int z = 2000;
A[x * y * z] = 33;
```

Если класс спроектирован для работы с большим количеством аргументов, то такая реализация operator\[\] является некорректной, так как не позволяет обращаться к элементам с порядковыми номерами более UINT\_MAX\. Диагностировать ошибку в приведенном примере можно только указав на потенциально опасный operator\[\]\. Выражение "x \* y \* z" не выглядит подозрительным, так как отсутствует неявное приведение типа\. Когда мы исправим operator\[\] следующим образом:

```cpp
float &operator[](ptrdiff_t i);
```

анализатор PVS\-Studio предупредит о возможной ошибке в строке "A\[x \* y \* z\] \= 33;" и мы сможем сделать код программы окончательно корректным\. Пример исправленного кода:

```cpp
class MyArray {
  std::vector<float> m_arr;
  ...
  float &operator[](ptrdiff_t i)  //V302
  { 
    DoSomething();
    return m_arr[i];
  } 
} A;
...
ptrdiff_t x = 2000;
ptrdiff_t y = 2000;
ptrdiff_t z = 2000;
A[x * y * z] = 33;
```

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