- В C ++ & buf [buf_index] является предпочтительным.
- В C buf + buf_index это нормально.
Почему ??
В C это часть определения идиомы. «Зачем говорить вещи с большим количеством слов, чем это возможно?». Скажи это как можно короче, это облегчит понимание и затруднит ввод неправильного текста.
C ++ Введенные контейнеры. Это структуры данных, которые «выглядят» так, как они не являются. Чтобы проиллюстрировать это, рассмотрим фрагмент кода, который использует массив C фиксированного размера.
int my_vec[FIXED_SIZE]; // create elements
FILL_VAL(&my_vec);
Позже вы захотите переключиться на массив переменного размера.
std::vector<int> my_vec(FIXED_SIZE); // create a container for elements
FILL_VAL(&my_vec); // << WRONG!!!
Теперь ваш макрос "FILL_VAL" делает не то, что нужно. он будет записывать поверх фактического вектора, почти наверняка создавая неверный указатель и, в конечном итоге, повреждение памяти. Вот почему на ранних этапах использования C ++ большинство программистов перешли на этот стиль.
std::vector<int> my_vec(FIXED_SIZE); // create a container for elements
FILL_VAL(&my_vec[0]); // << Works for c-array and vector!
Что касается того, что быстрее, они express точно то же самое. Компиляторы будут относиться к ним точно так же. Обычно компиляторы начинают с прохода, который заменяет эквивалентный код на единое стандартное представление. Таким образом, этап генерации кода может быть проще.