Re[8]: Массив и указатель: преобразование
От: Tscheineg  
Дата: 17.09.10 12:32
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Есть смысл отказаться от голого сишного массива char(&)[N] в пользу полноценного типа boost::array<char,N> или чего-то в таком роде.

К>Тогда можно заставить ошибки ловиться в рантайме.

Про boost::array я помню, но он будет ловить эти ошибки во время выполнения, а не компиляции.

Вот пара примеров, когда MSVC 2008 c 4 уровнем дает предупреждение: warning C4700: uninitialized local variable 'a' used


А)  
  int a[3];
  int b=a[10];


Б)  
  int a[3];
  a[9]=9;
  int b=a[10];


А вот примеры, когда компилится без предупреждений:

В)  
  int a[3];
  a[10]=10;
  int b=a[10];


Г)
  int a[3]={};
  int b=a[10];


То есть, компилятор знает размер массива и даже следит за тем, какие элементы массива инициализированы, а какие — нет (см. примеры Б и В). Так что ему мешает в этих явных случаях выдавать хотя бы предупреждение о выходе за границы?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.