Да, это опасно, as dasblinkenlight pointed out. Но есть более простой способ устранить такие проблемы.
Напишите свой код для простоты и удобочитаемости сначала. Сжатие вашей петли в наименьшее возможное количество строк не добавит ничего с точки зрения производительности, и даже если это произойдет, вам все равно, пока ваш профилировщик не скажет вам, что ваш цикл является узким местом.
С другой стороны, это сделает ваш код более трудным для чтения и, возможно, более подвержен ошибкам (как вы, вероятно, заметили).
В C++ 11, рассмотреть вопрос об использовании диапазона на основе for
цикл:
for (int& p : something)
{
// ...
}
В C++ 03, рекомендуется использовать std::for_each()
или классическую петлю на основе итераторы:
for (std::vector<int>::iterator i = something.begin(); i != something.end(); ++i)
{
// use *i to refer to the current pointy
// use (i - something.begin()) to get its index
// ...
}
Это достаточно безопасно, но вы попадаете в обфускацию кода. Это не приведет к созданию кода, который будет быстрее, поэтому вам лучше сделать все явным. Если вы действительно хотите, чтобы цикл работал так, вы могли бы использовать итераторы (вы не будете знать индекс цикла, но вы получите указатель на каждый элемент). – Dave
Почему вы не используете итераторы, предоставленные 'std :: vector' ?? –
Нет. Все в порядке.Третий аргумент ожидает действительного выражения. И это получает. – karthikr