Здравствуйте, varnie, Вы писали:
V>в книге "эффективное программирование на С++" авторов Э. Кёниг и Б. Му есть такой семпл:
V>V>//...
V>for (vector<Core>::size_type i = 0; i != students.size(); ++i){
V> cout << students[i].name() << string(maxlen + 1 - students[i].name.size());
V> try{
V> double final_grade = students[i].grade;
V> streamsize prec = cout.presision();
V> cout << setprecision(3) << final_grade << setprecision(prec) << endl;
V> } catch(doman_error e){
V> cout << e.what() << endl;
V> }
V>}
V>
V>хочу узнать, почему бы не сделать вот так:
V>V>//...
V>try{
V> for (vector<Core>::size_type i = 0; i != students.size(); ++i){
V> cout << students[i].name() << string(maxlen + 1 - students[i].name.size());
V> double final_grade = students[i].grade;
V> streamsize prec = cout.presision();
V> cout << setprecision(3) << final_grade << setprecision(prec) << endl;
V> }
V>} catch(doman_error &e){
V> cout << e.what() << endl;
V>}
V>
V>?
V>признателен пояснениям.
Можно сделать по разному ... и будет работать.
А разница в том, что в первом примере при возникновении исключения цикл не прервется, а во втором, при возникновении исключения цикл прерывается и дальнейшего перебора нет.
Вывод: первый пример (из книги) более правильный. (Кстати второй пример более быстрый с точки зрения кода)
Доброго времени суток! Мир Вам! С уважением
Clevelus.
Если мой ответ понравился — оцените, ни на что не влияет, но будет приятно.