Другие языки программирования и технологии

Изучение C++

Я начал изучать С++, читаю щас Р. Лафоре ООП в C++, (кроме этого я программирую на (delphi, php и веб программирование) - эти у меня хорошо получаются языки, и я решил перейти на более серьезный язык, что бы писать программы с хорошей скоростью и развером. Темболее освоив его остальные языки будут легки как изучение html.

У меня знакомы не плохо программирует на C++, когда я попросил его показать что он пишет, он показал как программирует на C++, программы у него неплохие. НО на вопросы которые я ему задавал, например для чего ты написал gcnew перед строкой, на этот вопрос он не смог ответить, и сказал что видел примерах так пишется. И многое он не может объяснить зачем он это делает и для чего.
Он большенств моментов не смог объяснить.. .
По моему он грубо говоря говнокодер.

Я хочу знать при программировании что для чего пишу, что быстрее и что правильнее.
Что мне читать? что за литературу?

Например что быстрее ++iterator или iterator++ ?

При описании цыклов луче в ней переменную указывать или выносить за цыкл? я слышал что луче выносить переменную за цыкл так цыкл бысрее работает?

int i;
for(i =0; i<=10; i++)

Я бы хотел все такие нюансы понять что и почему.
Тебе надо изучить ассемблер, хотя бы на базовом уровне, чтобы понять, во что будут компилироваться программы. Что угодно, хоть того же Абеля. Цель - не научиться программировать на ассеблере (хотя это тоже неплохо было бы :) ), а увидеть, что именно делает та или иная операция в C.

gcnew выделяет память в зоне, доступной для сборщика мусора (garbage collector, gc). gc - уродливая вещь, лучше ею не пользоваться (какой смысл высчитывать такты и байты, если потом все равно gc будет долго и натужно проверять, не потерялся ли кусок памяти) .

>Например что быстрее ++iterator или iterator++?
Одинаково. Но если в сложном выражении, то скорее префиксная форма будет быстрее.. .хотя зависит от оптимизатора. Дело в том, что ++iterator - одна ассебмленая операция (увеличить на 1), а iterator++ -две (сохранить значение и увеличить на 1).

int i;
for(i =0; i<=10; i++)
будет работать с точно той же скоростью, что и
for(int i =0; i<=10; i++)

Но
int i;
for(i =0; i<=10; i++)...
for(i =0; i<=10; i++)...
будет капельку быстрее
for(int i =0; i<=10; i++)...
for(int i =0; i<=10; i++)...
- потому что не будет создаваться доп. переменная.
С другой стороны, захламлять пространство имен лишними переменным ради выигрыша в два такта - по-моему, глупо. Твою программу вряд ли запустят миллиард раз, поэтому выигрыш пикосекунды - ничто по сравнению с потерей минуты на отладку не очень очевидного кода.

>Я бы хотел все такие нюансы понять что и почему.
Я тоже :) . Всех нюансов не знает, увы, никто.

Да, и цикл пишется через И.
Расторгуев Виталий
Расторгуев Виталий
86 876
Лучший ответ
На самом деле, после того, как ты написал в С++, происходит компиляция в машинные коды, там уже явно видно, как быстрее.. .
Чтобы знать, как работает процессор, надо ассемблером заниматься, там этот вопрос наиболее близко нужно знать...
Олег Гущин
Олег Гущин
34 523
Мануалы и чужие исходники. То что ты с циклом написал - это нужно только для с совместимости с С без ++.Пихай смело переменную в цикл, если такой вариант не годный, то компиль это оптимизирует.
Если писать
int i;
for (i=0;i<10;i++)
то переменную i можна анализировать по выходу из цикла или еще раз ее где-то использовать.
Если же писать
for (int i=0;i<10;i++)
то переменная i будет доступной только в теле цикла, а за его пределами ее не существует.