Не знаю, куда правильно поместить этот вопрос. "Средства разработки", ИМХО, не подходят.
Как компилятор анализирует, можно ли что-то выносить за пределы цикла?
Например:
for(....)//какие-то условия, не важно какие
{
double d = 10./N;
///N нигде явно не меняется
}
и, допустим, N объявляется так:
int N = 100;
//а вот тут вызвали функцию f1
f1(&N);//и она сохранила адрес N
for(....)
{
double d = 10./N;
///N нигде явно не меняется
//зато вызываем f2, которая воспользуется сохраненным адресом
f2();
}
Собственно, вопросы:
1) Если определения функций видны, способен ли компилятор осуществить какой-то анализ и определить, меняется N или нет?
2) Если способен, но не видит определений f1 или f2?
Есть ли что доступное в сети почитать про такое? (кроме исходников, конечно
)