A patch был отправлен в gcc, который предоставляет что-то, называемое векторной подписью на g ++ (gcc уже имел его).Являются ли векторные индексы стандартными C/C++?
Если a
- это массив, а i
- это int, то i[a]
является юридическим и равен a[i]
.
double a[]{0.0, 1.0, 2.0, 3.0}; // C++11 style but would work in C++98 style too.
assert(a[2] == 2.0);
assert(2[a] == 2.0);
Итак, является ли это законным и стандартным C/C++ или это расширение gcc?
На самом деле, Google показывает, что у MS Developer Studio тоже есть это. Я смотрел в стандарте C++ и не видел его.
Поскольку выражения '* (ptr + i)' и 'ptr [i]' идентичны, ответ отлично переносится из коммутативности добавления. Если я вижу, что кто-то из моей команды использует эту «функцию», он будет уволен на месте. – dasblinkenlight
Да, это противоречит интуиции и удивит людей, просматривающих код. Кроме того, к счастью, он работает по арифметике указателя, а не по лексическому правилу, поэтому он не будет работать, скажем, для std :: vector или std :: array. – emsr
Возможный дубликат [In C массивов, почему это правда? a \ [5 \] == 5 \ [a \]] (http://stackoverflow.com/questions/381542/in-c-arrays-why-is-this-true-a5-5a) –